Premium创造事件布置调用MySql存储进度,存储进度和事件下结论

一 、检查事件安插,操作:工具——命令行界面——执行命令 show variables like
‘%event_scheduler%’; (分号不可能丢)—— event_scheduler  ON 代表开启
event_scheduler OFF 代表关闭 

 

 什么是事件: 

一组SQL集,用来执行定时职责,跟触发器很像,都是被动执行的,事件是因为时间到了接触执行,而触发器是因为某件事件(增删改)触发执行;

翻开是不是打开:

show variables like 'event_scheduler';

倘使展现OFF,则输入以下语句开启:

set global event_scheduler = on;

提醒:尽管那里用set global event_scheduler =
on语句开启了轩然大波,然而每一遍重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),所以想让事件一贯维持开启,最好修改配置文件,让mysql服务运转的时候打开时间,只必要在997755.com澳门葡京,my.ini布署文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

自定义事件举例

首先、新建user表:

997755.com澳门葡京 1

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `address` varchar(500) NOT NULL,
  `addtime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

997755.com澳门葡京 2

下一场、新建事件,有二种事件类型,1个是距离触发,另一个是特定事件触发。

任务急需:定时执行的任务,调用存储进度,进行多少迁移。

1、工具:Navicat

*
997755.com澳门葡京 3*

项目一:每隔一分钟插入一条数据:

参数表达:

DEFINER:创建者;

ON COMPLETION [NOT] PRESEPRADOVE
:表示当事件不会再发生的情景下,删除事件(注意一定时刻实施的事件,假使设置了该参数,执行达成后,事件将被剔除,不想删除的话可以安装成ON
COMPLETION PRESE君越VE);

ENABLE:表示系统将推行这一个事件;

997755.com澳门葡京 4

-- ----------------------------
-- Event structure for `event_minute`
-- ----------------------------
DROP EVENT IF EXISTS `event_minute`;
DELIMITER ;;
CREATE DEFINER=`xxxxx`@`10.36.40.1` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2016-08-15 22:46:33' ON COMPLETION NOT PRESERVE ENABLE DO 

BEGIN
    INSERT INTO USER(name, address,addtime) VALUES('test1','test1',now());
    INSERT INTO USER(name, address,addtime) VALUES('test2','test2',now());
END
;;
DELIMITER ;

997755.com澳门葡京 5

积存进程有关计算:(存储进度的开创  无法陪同有if exists
 须要超前判断删除同名的储存进程)

贰 、通过下列语句l爱查询event是不是打开

二 、开启事件安排——命令行界面——执行命令  set global
event_scheduler=on;(分号不可能丢)

项目二:特定时刻插入一条数据,如2016-01-17 15:30:00**

参数表达:

DEFINER:创建者;

ON COMPLETION [NOT] PRESE帕杰罗VE
:表示当事件不会再爆发的动静下,删除事件(注意一定时刻实施的轩然大波,假诺设置了该参数,执行完结后,事件将被删去,不想删除的话可以安装成ON
COMPLETION PRESE瑞虎VE);

ENABLE:表示系统将举办这几个事件;

997755.com澳门葡京 6

-- ----------------------------
-- Event structure for `event_at`
-- ----------------------------
DROP EVENT IF EXISTS `event_at`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2016-01-17 15:30:00' ON COMPLETION NOT PRESERVE ENABLE DO 

BEGIN
    INSERT INTO USER(name, address,addtime) VALUES('AT','AT',now());
END
;;
DELIMITER ;

997755.com澳门葡京 7

查看结果,结果正确:

997755.com澳门葡京 8

存储进程的查阅:

开辟Navicat命令列界面(点击工具得以看到或按F6) 输入上面发号施令

997755.com澳门葡京 9

 

 

 

 

 

mysql的定时任务一般用event(事件)来成功,触发器不可以到位。
壹 、通过mysql的通令行客户端来形成
1、set global event_scheduler =1; //开启event_scheduler
实践这么些讲话尽管出现,可在mysql的安顿文档中设置[mysqld]段中添加
event_scheduler=ON
只要重启mysql;那种场合下如故出错,Error Code: 1290. The MySQL server is
running with the –event-scheduler=DISABLED 
or –skip-grant-tables option so it cannot execute this
statement,那些荒唐是说运转服务器时即便指定了–skip-grant-tables选项,则event_scheduler则自动被设置为DISABLED。命令行或陈设文件的安装都会被遮住。指出再现安装mysql或是修改运转参数(在系统服务中内定)。

查看event_scheduler状态:show status like ‘%event%’;
SELECT @@event_scheduler;
② 、CREATE PROCEDURE Mypro() //创立存储进程

BEGIN
update userinfo SET endtime = now() WHERE id = ‘155’;
END;
3、创建event My_enevt,每隔三十秒执行一回
create event if not exists e_test
on schedule every 30 second
on completion preserve
do call Mypro();
④ 、关闭事件 
alter event e_test ON COMPLETION PRESERVE DISABLE;
五 、开启事件
alter event e_test ON COMPLETION PRESERVE ENABLE;
语法:
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON
COMPLETION
[NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT ‘comment’] DO
sql_statement;
schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS
TIMESTAMP]
[ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY |
HOUR |
MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND |
HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

示例:

1) 首先来看多少个简约的事例来演示每秒插入一条记下到数据表
CREATE EVENT e_test_insert ON SCHEDULE EVERY 1 SECOND DO INSERT INTO
test.aaa VALUES  (CURRENT_Premium创造事件布置调用MySql存储进度,存储进度和事件下结论。TIMESTAMP);

2) 5天后清空test表:
CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

3) 二〇一一年一月十九日12点整清空test表:
CREATE EVENT e_test ON SCHEDULE AT TIMESTAMP ‘2013-07-20 12:00:00’
DOTRUNCATE TABLE test.aaa;

4) 每日定时清空test表:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE test.aaa;

5) 5天后敞开每日定时清空test表:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP +
INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

6) 每日定时清空test表,5天后终止执行:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP +
INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

7) 5天后打开每一天定时清空test表,2个月后终止实施:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP

  • INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH DO TRUNCATE
    TABLE test.aaa;

[ON COMPLETION [NOT]
PRESERVE]可以安装那么些事件是实施几回仍旧持久执行,暗中认同为NOT PRESE宝马X3VE
8)
每天定时清空test表(只举办五回,职务已毕后就为止该事件):
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;

[COMMENT
comment]能够给该事件加上注释

2>修改事件(ALTE兰德酷路泽 EVENT)
ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO
new_event_name]
[ON COMPLETION [NOT] PRESERVE] [COMMENT ‘comment’] [ENABLE |
DISABLE] [DO
sql_statement]

1) 权且关门事件
ALTER EVENT e_test DISABLE;

2) 开启事件
ALTER EVENT e_test ENABLE;

3) 将天天清空test表改为5天清空一遍:
ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;

3>删除事件(DROP EVENT)

语法很粗略,如下所示:
DROP EVENT [IF EXISTS] event_name

比如说删除前边创设的e_test事件
DROP EVENT e_test;

理所当然前提是其一事件存在,否则会生出ELacrosseRO哈弗 1513 (HY000): Unknown
event错误,因而最好增加IF EXISTS
DROP EVENT IF EXISTS e_test;

贰 、使用第3方工具来创建,推荐应用HeidiSQL网站:,免费的开源客户端,由德国程序员Ansgar
Becker开发;那些软件的界面有汉语界面。
开辟HeidiSQL,右键单击表名,选创立新的的菜单,再选事件即可,很有益于,我们得以编写事件的岁月设置和代码。那里定义人填写root@localhost。

select name from mysql.proc where db = your_db_name and type =
PROCEDURE

show variables like ‘%sche%’;

叁 、成立事件陈设,操作:连接名——数据库——事件——新建事件

show procedure status;

997755.com澳门葡京 10

997755.com澳门葡京 11

翻看存储进度或函数的创导代码

 

四 、事件安顿设置,定义——填写要调用的存储过程(要成功的需求),安插——设置事件安顿的举办时间

show create procedure proc_name;

 三 、假如图中event_scheduler  为 OFF
通过举行下列语句,来开启event_scheduler

997755.com澳门葡京 12

储存进程的创造 语法以及碰到的题材

set global event_scheduler =1;

⑤ 、保存——输入事件铺名次——显然

MySQL中,创造存储进程的为主情势如下:

④ 、新建函数,采纳经过,编辑sql语句,即定时执行的操作

997755.com澳门葡京 13

CREATE PROCEDURE sp_name ([proc_parameter[,…]])

点击新建函数->

 

[characteristic …] routine_body

997755.com澳门葡京 14

其中,sp_name参数是储存进度的称谓;proc_parameter代表存储进度的参数列表;
characteristic参数钦定存储进度的风味;routine_body参数是SQL代码的内容,能够用BEGIN…END来表明SQL代码的发轫和了结。

慎选进程->

proc_parameter中的每一个参数由3局地组成。这3片段个别是输入输出类型、参数名称和参数类型。其款式如下:

997755.com澳门葡京 15

[ IN | OUT | INOUT ] param_name type

填写名称(test2)->完结->编辑sql->保存

其间,IN表示输入参数;OUT代表输出参数;
INOUT表示既可以是输入,也得以是出口;
param_name参数是储存进程的参数名称;type参数内定存储进程的参数类型,该类型可以是MySQL数据库的随机数据类型。

997755.com澳门葡京 16

characteristic参数有八个取值。其取值表明如下:

 

LANGUAGE
SQL:说明routine_body部分是由SQL语言的讲话组成,这也是数据库系统暗许的语言。

 点击函数来看刚才成立的进度

[NOT]
DETE昂科威MINISTIC:指明存储进程的施行结果是或不是是鲜明的。DETE途达MINISTIC表示结果是规定的。每一遍执行存储进程时,相同的输入会取得相同的输出。NOT
DETE宝马X5MINISTIC表示结果是非显然的,相同的输入恐怕取得区其他输出。暗中认同情形下,结果是非显然的。

997755.com澳门葡京 17

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
}:指明子程序拔取SQL语句的界定。CONTAINS
SQL表示子程序包蕴SQL语句,但不包罗读或写多少的口舌;NO
SQL表示子程序中不含有SQL语句;READS SQL
DATA表示子程序中涵盖读数据的言辞;MODIFIES SQL
DATA表示子程序中蕴含写多少的说话。暗中同意情况下,系统会钦点为CONTAINS SQL。

伍 、创造事件,写入call
test1(刚才开立的进度名称),点击布置,设置举办起来时间及频率

SQL SECUTiguanITY { DEFINECR-V | INVOKE汉兰达}:指明何人有权力来推行。DEFINEPRADO代表除非定义者本人才可以实施;INVOKELacrosse表示调用者可以执行。暗中认同情状下,系统内定的权柄是DEFINECRUISER。

997755.com澳门葡京 18

COMMENT ‘string’:注释音信。

每5秒执行一次,2017-12-06 14:35:00为发端时间(注意格式) 保存

技巧:成立存储进程时,系统暗中同意内定CONTAINS
SQL,表示存储进度中动用了SQL语句。不过,假诺存储进程中一贯不采取SQL语句,最好设置为NO
SQL。而且,存储进程中最幸而COMMENT部分对存储进度进展简易的申明,以便以往在翻阅存储进程的代码时更是有益于。

997755.com澳门葡京 19

成立3个名为num_from_employee的储存进度。代码如下:

⑥ 、如未执行,执行上面发号施令开启事件

CREATE  PROCEDURE  num_from_employee (IN emp_id INT, OUT count_num
INT )

ALTE途观 EVENT 你的轩然大波名称  ENABLE;

READS SQL DATA

BEGIN

SELECT  COUNT(*)  INTO  count_num

FROM  employee

WHERE  d_id=emp_id ;

END

上述代码中,存储进度名称为num_from_employee;输入变量为emp_id;输出变量为count_num。SELECT语句从employee表查询d_id值等于emp_id的记录,并用COUNT(*)计算d_id值相同的记录的条数,最后将总计结果存入count_num中。代码的执行结果如下:

mysql> DELIMITER &&

mysql> CREATE  PROCEDURE  num_from_employee

(IN emp_id INT, OUT count_num INT )

-> READS SQL DATA

-> BEGIN

-> SELECT  COUNT(*)  INTO  count_num

-> FROM  employee

-> WHERE  d_id=emp_id ;

-> END &&

Query OK, 0 rows affected (0.09 sec)

mysql> DELIMITER ;

代码执行已毕后,没有报出别的失误消息就代表存储函数已经创造成功。今后就足以调用那些蕴藏进程,数据库中会执行存储进程中的SQL语句。

表明:MySQL中暗许的说话为止符为分号(;)。存储进程中的SQL语句要求分号来 
  甘休。为了幸免抵触,首先用”DELIMITE翼虎&&”将MySQL的截至符设置为&&。最终再用”DELIMITE纳瓦拉;”来将截至符復苏成分号。那与创设触发器时是一模一样的。

壹 、MySQL 创制存储进度

“pr_add” 是个简单的 MySQL 存储进程,那些蕴藏进度有多少个 int
类型的输入参数 “a”、“b”,再次来到那八个参数的和。

drop procedure if exists pr_add;

— 计算多个数之和

create procedure pr_add

(

a int,

b int

)

begin

declare c int;

if a is null then

set a = 0;

end if;

if b is null then

set b = 0;

end if;

set c = a + b;

select c as sum;

/*

return c;- 不可以在 MySQL 存储进度中运用。return 只可以出现在函数中。

/

end;

② 、调用Mysql存储进程

eg: call pr_add(10,20);

推行 MySQL 存储进程,存储进度参数为 MySQL 用户变量。

set @a = 10;

set @b = 20;

call pr_add(@a, @b);

一经存储进度如下:create procedure pr_return2Pr(a int,out b int,inout c
int) begin set b =a; set c = a+ c; end

set @cc = 3;call pr_return2Pr(1,@bb,@cc);select @bb,@cc; 返回1,4

倘使存储进程中变量定义为out,可以不开展变量值定义,直接表明即可。inout 
则须求提前set 变量,然后调用。

IN为默许类型,值必须在调用时钦定,值不或然回到(值传递)

OUT值可以回来(指针传递)

INOUT值必须在调用时内定,值能够重临

动用DECLARE来声称,DEFAULT赋专断认同值,SET赋值

DECLARE counter INT DEFAULT 0;  – 默认为0

SET counter = counter+1;              – 自增+1

③ 、MySQL 存储进度特征

成立 MySQL 存储进程的总结语法为:

create procedure 存储进度名字()

(

[in|out|inout] 参数 datatype

)

begin

MySQL 语句;

end;

MySQL
存储进度参数借使不显式钦定“in”、“out”、“inout”,则暗许为“in”。习惯上,对于是“in”
的参数,我们都不会显式内定。

如下,给出解释

  1. MySQL 存储进程名字背后的“()”是必须的,即使没有3个参数,也急需“()”

  2. MySQL 存储进程参数,无法在参数名称前加“@”,如:“@a
    int”。下边的创立存储进度语法在 MySQL 中是不当的(在 SQL Server
    中是不易的)。 MySQL 存储进程中的变量,不须要在变量名字前加“@”,纵然MySQL 客户端用户变量要加个“@”。

create procedure pr_add

(

@a int,- 错误

b int  – 正确

)

  1. MySQL 存储进程的参数无法指定暗许值。

  2. MySQL 存储进度不须要在 procedure body 后边加 “as”。而 SQL Server
    存储进程必须加 “as” 关键字。

create procedure pr_add

(

a int,

b int

)

as            – 错误,MySQL 不需要 “as”

begin

mysql statement …;

end;

  1. 假定 MySQL 存储进度中带有单条大概多条 MySQL 语句,都急需 begin end
    关键字。

create procedure pr_add

(

a int,

b int

)

begin

mysql statement 1 …;

mysql statement 2 …;

end;

6.MySQL 存储过程中的每条语句的终极,都要增加分号 “;”

declare c int;

if a is null then

set a = 0;

end if;

  1. MySQL 存储进度中的注释。

/*

这是个

多行 MySQL 注释。

/

declare c int;    – 那是单行 MySQL 注释 (注意- 后至少要有二个空格)

if a is null then 那也是个单行 MySQL 注释

set a = 0;

end if;

end;

  1. 无法在 MySQL 存储进度中使用 “return” 关键字。

set c = a + b;

select c as sum;

/*

return c;- 不可以在 MySQL 存储进程中行使。return 只可以现身在函数中。

/

end;

  1. 调用 MySQL
    存储进度时候,须求在进度名字背后加“()”,即便没有1个参数,也须要“()”

call pr_no_param();

  1. 因为 MySQL 存储进度参数没有私自认同值,所以在调用 MySQL
    存储进程时候,无法差不多参数。可以用 null 来顶替。

call pr_add(10, null);

mysql写规范判断时,注意时if  elseif  else 
其中elseif之间是不可见有空格的。

命令行编写存储进度命令是毫无疑问注意提前delimiter。表达:MySQL中默许的话语甘休符为分号(;)。存储进程中的SQL语句需求分号来 
  停止。为了避免争论,首先用”DELIMITERubicon&&”将MySQL的落成符设置为&&。最后再用”DELIMITE卡宴;”来将终止符復苏成分号。那与创设触发器时是如出一辙的。不过mysql
窗口就没难题了。

存储进度的删除:
无法在1个积存进度删除另一个仓储进程,只好调用另2个积存进程

drop procedure if exists prName

11,存储方法

储存方法与储存进程的分化

1,存储方法的参数列表只允许IN类型的参数,而且没须求也不一样意钦定IN关键字

2,存储方法重回三个纯净的值,值的品类在储存方法的头顶定义

3,存储方法可以在SQL语句内部调用

4,存储方法不或许回去结果集

mysql事件:成立存储进程的时候,如若选择命令行的法门,须要先修改命令停止符,将分店改成其它的标志,注意delimiter时
无法在$$后添加;  否则就以$$;  作为完成标记了。

— 设置分隔符为 ‘$$’ ,mysql暗中认可的口舌分隔符为 ‘;’ ,那样在继续的 create
到 end 那段代码都会作为是一条语句来施行

DELIMITER $$

//制造存储进程依旧事件语句

//结束

$$

– 将语句分割符设置回 ‘;’

DELIMITER ;

事件简介

事件(event)是MySQL在对应的时刻调用的进程式数据库对象。多少个风浪可调用几回,也可周期性的启航,它由2个特定的线程来保管的,约等于所谓的“事件调度器”。

事件和触发器类似,都以在某个事情时有发生的时候运维。当数据库上运行一条语句的时候,触发器就开动了,而事件是依据调度事件来运转的。由于他们相互相似,所以事件也称之为一时半刻性触发器。

事件代表了原来只可以由操作系统的安插职责来实施的工作,而且MySQL的风云调度器可以规范到每分钟执行二个义务,而操作系统的布署职分(如:Linux下的CRON或Windows下的天职安排)只可以精确到每分钟实施一回。

2 事件的得失

2.1 优点

有个别对数码定时性操作不再正视外部程序,而间接使用数据库自个儿提供的法力。

能够兑现每分钟执行二个职务,那在一部分对实时性必要较高的条件下就尤其实用了。

2.2 缺点

定时触发,不能够调用。

3 创设事件

一条create
event语句创制3个风浪。各个事件由多个重一大半组成,第1片段是事件调度(event
schedule),表示事件曾几何时运营以及按如何频率运行,第3有些是事件动作(event
action
),那是事件运维时执行的代码,事件的动作带有一条SQL语句,它只怕是二个简单地insert恐怕update语句,也得以使一个存储进程照旧benin…end语句块,那三种情状允许我们实施多条SQL。

三个轩然大波可以是移动(打开)的或截止(关闭)的,活动表示事件调度器检查事件动作是还是不是必须调用,截止意味着事件的宣示存储在目录中,但调度器不会检查它是还是不是应该调用。在3个事件成立之后,它马上变成活动的,1个活动的风云可以实施两次还是反复。

3.1 创设语法如下

CREATE

[DEFINER = { user | CURRENT_USER }]

EVENT

[IF NOT EXISTS]

event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT ‘comment’]

DO event_body;

schedule:

AT timestamp [+ INTERVAL interval] …

| EVERY interval

[STARTS timestamp [+ INTERVAL interval] …]

[ENDS timestamp [+ INTERVAL interval] …]

interval:

quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |

DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

名词解释:

event_name :创制的event名字(唯一明确的)。

ON SCHEDULE:布置义务。

schedule:
决定event的进行时间和频率(注意时间自然若是未来的光阴,过去的时光会出错),有三种格局AT和EVELANDY。

[ON COMPLETION [NOT] PRESERVE]: 可采用,暗中认同是ON COMPLETION NOT
PRESE奥迪Q3VE 即陈设职责履行已毕后自行drop该事件;ON COMPLETION 
PRESE君越VE则不会drop掉。

[COMMENT ‘comment’] :可接纳,comment
用来讲述event;十二分注释,最大尺寸六十七个字节。

[ENABLE | DISABLE]
:设定event的气象,暗许ENABLE:表示系统尝试进行这几个事件,
DISABLE:关闭该事情,可以用alter修改

DO event_body: 必要实施的sql语句(可以是复合语句)。CREATE
EVENT在储存过程中运用时合法的。

定时器 — 成立定时器后会在mysql 中开创一个线程用以实施该事件。
user就是event_scheduler command-daemon state-waiting for next
activation

1.翻看定时器-事件调度器
MySQL事件调度器event_scheduler负责调用事件,它暗中同意是关门的。这一个调度器不断地监视一个事件是或不是要调用,
要成立事件,必须打开调度器。

show variables like ‘%event_scheduler%’;

2.打开时间调度器

命令行:

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

SET GLOBAL event_scheduler = 1;

SET @@global.event_scheduler = 1;

布署文件:event_scheduler = 1 #或者ON

翻看调度器线程

mysql> show processlist;

+—-+—————–+———–+——+———+——+————————+——————+

| Id | User            | Host      | db  | Command | Time | State       
          | Info            |

+—-+—————–+———–+——+———+——+————————+——————+

|  2 | root            | localhost | NULL | Query  |    0 | NULL       
          | show processlist |

|  3 | event_scheduler | localhost | NULL | Daemon  |    6 | Waiting on
empty queue | NULL            |

+—-+—————–+———–+——+———+——+————————+——————+

关闭事件调度器

透过命令行

可经过如下任何3个命令行

SET GLOBAL event_scheduler = OFF;

SET @@global.event_scheduler = OFF;

SET GLOBAL event_scheduler = 0;

SET @@global.event_scheduler = 0;

经过布署文件my.cnf

在[mysqld]下增加

event_scheduler = 0 #或者OFF,DISABLED

查阅调度器线程

mysql> show processlist;

+—-+——+———–+——+———+——+——-+——————+

| Id | User | Host      | db  | Command | Time | State | Info           
|

+—-+——+———–+——+———+——+——-+——————+

|  2 | root | localhost | NULL | Query  |    0 | NULL  | show
processlist |

+—-+——+———–+——+———+——+——-+——————+

翻开事件运维状态:

(1)查询mysql.event表;

(2)通过SHOW EVENTS命令;

(4)通过询问information_schema.events表

(5)SHOW CREATE EVENT。 — 查看创造目录

总的说来,event的采用频率较低提出利用root用户展开创办和护卫。

应用权限

独立行使event调用SQL语句时,查看和成立须要用户拥有event权限,调用该SQL语句时,必要用户全部执行该SQL的权能。伊夫nt权限的设置保存在mysql.user表和mysql.db表的伊芙nt_priv字段中。

当event和procedure合作使用的时候,查看和开创存储进程需求用户全数create
routine权限,调用存储进度执行时必要使用excute权限,存储进程调用具体的SQL语句时,须要用户全数实践该SQL的权力。

至于事件陈设的权位:

独立使用event调用SQL语句时,查看和制造必要用户全部event权限,调用该SQL语句时,需求用户全部履行该SQL的权位。伊夫nt权限的安装保存在mysql.user表和mysql.db表的伊夫nt_priv字段中。(FLUSH
PRIVILEGES;)

当event和procedure同盟使用的时候,查看和创设存储进度需求用户拥有create
routine权限,调用存储进程进行时索要使用excute权限,存储进度调用具体的SQL语句时,需求用户拥有履行该SQL的权柄。

SELECT HOST,USER,Event_priv FROM mysql.user;

(Figure1:user表的Event_priv权限)

赢得当前登陆的用户和数据库:SELECT CULANDRENT_USER(), SCHEMA();

从Figure1可以知道bfsql@%是从未有过伊夫nt_priv权限的,在该用户下开创事件的时候会合世下边的一无所能:

Error Code: 1044

Access denied for user ‘bfsql’@’%’ to database ‘blog’

假如出现上面的不当,执行上面的SQL就能够给bfsql@%予以创立伊芙nt的权位:

UPDATE mysql.user SET Event_priv = ‘Y’ WHERE HOST=’%’ AND USER=’bfsql’;

如果你这一个时候再次实施创建Event的SQL,照旧会现出上面的不当,因为你必要实践:

FLUSH PENCOREIVILEGES;最终,你可以透过SHOW GRANTS FOPAJERO’bfsql’@’%’;查看全体权限;

创造event语句相关命令解释:

ON SCHEDULE 安插义务,有两种设虞诩顿义务的法门:

  1. AT 时间戳,用来成功单次的安排任务。

  2. EVESportageY 时间(单位)的多寡时间单位[STARTS 时间戳]
    [ENDS时间戳],用来已毕重复的安顿职分。

在二种陈设任务中,时间戳可以是自由的TIMESTAMP 和DATETIME
数据类型,时间戳要求大于当前光阴。

在重新的安插义务中,时间(单位)的多少可以是随机非空(Not
Null)的平头式,时间单位是非同儿戏词:YEA牧马人,MONTH,DAY,HOUXC90,MINUTE
大概SECOND。

提示: 其他的年月单位也是官方的如:QUA酷路泽TE翼虎, WEEK,
YEARAV4_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND,
MINUTE_SECOND,不指出利用那么些不专业的时刻单位。

标注4: [ON COMPLETION [NOT] PRESERVE]

ON
COMPLETION参数表示”当以此事件不会再暴发的时候”,即当单次陈设职务履行达成后或当重复性的安排职责执行到了ENDS阶段。而PRESE奥迪Q5VE的效率是使事件在执行已毕后不会被Drop掉,提议使用该参数,以便于查看EVENT具体新闻。

标注5:[ENABLE | DISABLE]

参数Enable和Disable表示设定事件的意况。Enable代表系统将进行这些事件。Disable代表系统不实施该事件。

可以用如下命令关闭或打开事件:

ALTER EVENT event_name  ENABLE/DISABLE

标注6:[COMMENT ‘comment’]

诠释会冒出在元数据中,它存储在information_schema表的COMMENT列,最大尺寸为6六个字节。’comment’代表将注释内容放在单引号之间,提议拔取注释以发挥更全面的消息。

当然SQL语句是有限量的,对它的界定跟函数Function和触发器Trigger
中对SQL语句的限制是同等的,即使您在函数Function 和触发器Trigger
中不可以利用一些SQL,同样的在EVENT中也不可以运用。鲜明的来说有下边多少个:

LOCK TABLES

UNLOCK TABLES

CREATE EVENT

ALTER EVENT

LOAD DATA

修改事件 使用ALTEMurano EVENT
来修改事件,具体的ALTEGL450语法如下,与创设事件的语法类似:

剔除事件:EVENT使用DROP EVENT语句来删除已经创办的风浪,语法如下:DROP
EVENT [IF EXISTS] event_name

但当三个轩然大波正在周转中时,删除该事件不会导致事件截至,事件会履行到完工截至。使用DROP
USEXC60和DROP DATABASE 语句同时会将富含其中的事件删除。

每隔一秒自动调用e_test()存储进度:

CREATE EVENT IF NOT EXISTS e_test

ON SCHEDULE EVERY 1 SECOND

ON COMPLETION PRESERVE

DO CALL e_test();

各个月的一号凌晨1 点推行STAT()存储进程:

CREATE  EVENT  NOT EXISTS  STAT

ON  SCHEDULE  EVERY  1  MONTH  STARTS
DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),
INTERVAL 1 MONTH),INTERVAL 1 HOUR)

ON  COMPLETION  PRESERVE  ENABLE

DO

BEGIN

CALL STAT();

END

创建一个每隔3秒往test表中插入一条数据的轩然大波,代码如下:

CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND

ON COMPLETION PRESERVE

DO INSERT INTO test(id,t1) VALUES(”,NOW());

创立二个10分钟后清空test表数据的轩然大波

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE

DO TRUNCATE TABLE test.aaa;

创办三个在2011-08-23 00:00:00天天清空test表数据的事件

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

AT TIMESTAMP ‘2012-08-23 00:00:00’

DO TRUNCATE TABLE test;

创制二个从2011年四月十九日21点4五分起来到10分钟后终止,运转每隔3秒往test表中插入一条数据的轩然大波

CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND

STARTS ‘2012-08-22 21:49:00’

ENDS ‘2012-08-22 21:49:00’+ INTERVAL  10 MINUTE

ON COMPLETION PRESERVE

DO INSERT INTO test(id,t1) VALUES(”,NOW());

注意:

默许创制事件存储在时下库中,也可展现钦定事件创制在哪个库中

通过show events只可以查看当前库中创建的事件

事件实施完即释放,如立时施行事件,执行完后,事件便自动删除,数1陆遍调用事件或等候执行事件可以查看到。

一经七个事件需要在同样时刻调用,mysql会明确调用他们的一一,即便要钦定顺序,必要保险二个风云至少在另1个风云1秒后实施

对此递归调度的轩然大波,停止日期不大概在初始日期此前。

select可以蕴含在一个风云中,但是她的结果没有了,就就好像没实施过。

剔除事件:drop event
语句删除它。使用那条语句我们不必要等到最终一遍事件调用。DROP EVENT [IF
EXISTS] event_name,drop event if exists event_second;

三个轩然大波示例:每分钟的零秒执行多少迁移

create event updateEachMinuteAt0Second

on schedule every 1 minute starts timestampadd(second,60
-second(current_timestamp()),current_timestamp())

on completion preserve enable

do

begin

call updatetestevent();

end

函数体内使用函数变量提前阐明 declare a int;   判断是或不是为空   a is null;
 条件块:if  body then body; elseif body then body; end if;            
  存储进度:begin  body  end;

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website