mysql 定时器 使用说明_mysql 定时器用法总结、实例、时间实例

1、创建定时器事件

语法如下:

CREATE EVENT [IF NOT EXISTS]  ‘事件名’

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement

2、修改事件

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

ALTEREVENT event_name

ON SCHEDULE schedule

[RENAME TOnew_event_name]

[ON COMPLETION [NOT]PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement;

3、关于事件计划的权限:

单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。(FLUSH PRIVILEGES;)

当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。

SELECT HOST,USER,Event_priv FROM mysql.user;

0818b9ca8b590ca3270a3433284dd417.png

(Figure1:user表的Event_priv权限)

获取当前登陆的用户和数据库:SELECT CURRENT_USER(), SCHEMA();

从Figure1可以知道bfsql@%是没有Event_priv权限的,在该用户下创建事件的时候会出现下面的错误:

Error Code: 1044

Access denied for user 'bfsql'@'%' to database 'blog'

如果出现上面的错误,执行下面的SQL就可以给bfsql@%赋予创建Event的权限:

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

如果你这个时候再次执行创建Event的SQL,还是会出现上面的错误,因为你需要执行:

FLUSH PRIVILEGES;最后,你可以通过SHOW GRANTS FOR 'bfsql'@'%';查看所有权限;

4、实例

CREATEEVENT testEvent

ON  SCHEDULE EVERY 10 SECOND STARTS now()

ON COMPLETION PRESERVE ENABLE

DO BEGIN

-- 现在执行每隔10秒执行一次

INSERT INTO ad_db.fh_test_timer ( VALUE) VALUES (now());     -- 循环要干的事情 可以调用其他存储过程 如:call test();

END

注意:如果调用的是,存储过程,则do后面的begin end不要。

5、开启、关闭定时器

开启(执行sql语句如下):

SET GLOBAL event_scheduler = 1;  -- 启动定时器

ALTER EVENT testEvent ON  COMPLETION PRESERVE ENABLE;   -- 开启事件

关闭定时器:

SET GLOBAL event_scheduler = 0;  -- 关闭定时器

ALTER EVENT testEvent OFF COMPLETION PRESERVE DISABLE;   -- 关闭事件

总结:键值1或者ON表示开启;0或者OFF表示关闭;

6、时间设置实例

ON SCHEDULE 计划任务,有两种设定计划任务的方式:

1. AT 时间戳,用来完成单次的计划任务。

2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,可以选 1 second,3 minute,5 hour,9 day,1month,1 quarter(季度),1 year,分别对应多少秒、分钟、小时、天、月、季度、年

重复计划如:

a、从2013年12月18号0点开始,每天运行一次

ONSCHEDULE EVERY 1DAY STARTS'2013-12-18 00:00:00'

b、

从现在开始每隔九天定时执行

ONSCHEDULEEVERY9 DAY STARTSNOW() ;

c、

每个月的一号凌晨1 点执行

on schedule every1 monthstartsdate_add(date_add(date_sub(curdate(),interval day(curdate())-1day),interval 1 month),interval 1 hour);

D、

每个季度一号的凌晨1点执行

on schedule every1 quarterstartsdate_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval1 quarter),interval 1 hour);

F、

每年1月1号凌晨1点执行

on schedule every1 yearstartsdate_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval1 quarter),interval 1 hour);

7、其他

其他命令:

/*

SHOW VARIABLES LIKE '%sche%'; -- 查看定时器状态

SET GLOBAL event_scheduler = 1;  -- 启动定时器

SET GLOBAL event_scheduler = 0;  -- 停止定时器

ALTER EVENT testEvent ON  COMPLETION PRESERVE ENABLE;   -- 开启事件

ALTER EVENT testEvent ON  COMPLETION PRESERVE DISABLE;  -- 关闭事件

*/

注意:

1、mysql定时器是从mysql5.1开始的,如果你的mysql版本低于5.1,那就不能使用mysql定时器,查询mysql版本的方法:select version()

2、mysql定时器,默认是关闭的。

3、查询自己创建的定时器: SELECT * FROM  mysql.event;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值