首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

实战mysql储存程序与定时器

2013-11-13 
实战mysql存储程序与定时器如果不是on,就执行?会发现mysql多起了一个daemon进程(注:?对于我们线上环境来说

实战mysql存储程序与定时器

如果不是on,就执行

?


会发现mysql多起了一个daemon进程

(注:?对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。)

?

第三步:创建定时任务

语法:

CREATE EVENT 的语法如下:

CREATE EVENT

[IF NOT EXISTS] ---------------------------------------------*标注1

event_name -----------------------------------------------------*标注2

?

ON SCHEDULE schedule ------------------------------------*标注3?

[ON COMPLETION [NOT] PRESERVE] -----------------*标注4

[ENABLE | DISABLE] ----------------------------------------*标注5?

[COMMENT 'comment'] --------------------------------------*标注6?

DO sql_statement -----------------------------------------------*标注7

;

?

标注3:ON SCHEDULE

?

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

?

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

?

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

?

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

?

在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

?

提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。

?

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

?

ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

?

?

?

标注5:[ENABLE | DISABLE]

参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

?

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

每天凌晨三点执行create event event_call_defer   on schedule every 1 day starts date_add(date(curdate() + 1),interval 3 hour)on completion preserve enabledobegin    call test.warn();end每个月的一号凌晨1 点执行CREATE EVENT EVENT2  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 ENABLEDO BEGIN     CALL STAT(); END 每个季度一号的凌晨2点执行CREATE EVENT TOTAL_SEASON_EVENTON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2HOUR)ON COMPLETION PRESERVE ENABLEDO BEGIN     CALL SEASON_STAT(); END 每年1月1号凌晨四点执行CREATE EVENT TOTAL_YEAR_EVENTON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)ON COMPLETION PRESERVE ENABLEDO BEGIN     CALL YEAR_STAT(); END

?

(本文注重实战,语法等知识请查询相关手册)

热点排行