1.MySQL从5.1开始支持event功能
(1)有了这个功能之后,只需要设定好执行时间,执行事件
(2)执行事件一般是要执行的sql语句或者封装好的复杂的存储过程
(3)通常,事件名称的规则与存储例程的名称相同
2.创建事件语法 :
(1)CREATE EVENT关键字
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}
(2)最小CREATE EVENT声明示例:
<1>关键字CREATE EVENT加上一个事件名称,它唯一标识数据库模式中的事件
<2>ON SCHEDULE子句,用于确定事件执行的时间和频率
<3>DO子句,其中包含要由事件执行的SQL语句或者复杂的存储过程
CREATE EVENT event_name
ON SCHEDULE schedule
DO event_body;
3.修改事件语法:
(1) ALTER关键字
(2)语法类型和创建语法一样
4.删除事件:
DROP EVENT [IF EXISTS] event_name
5.事件语法关键字解释;
(1)CREATE EVENT需要 EVENT 特权才能创建事件,可能还需要 SET_USER_ID或 SUPER特权,具体取决于 DEFINER 值
<1>DEFINER子句指定在事件执行时检查访问特权时要使用的MySQL帐户
<2>DEFINER的默认值是执行CREATE EVENT语句的用户,这与明确指定DEFINER = CURRENT_USER相同
(2)IF NOT EXISTS:
<1>对于CREATE EVENT具有与CREATE TABLE相同的含义
<2>如果名称为event_name的事件已存在于同一模式中,则不采取任何操作,并且不会产生错误
(3)ON SCHEDULE schedule:本条款采取两种形式之一(AT和STARTS)
ON SCHEDULE子句schedule确定event_body为事件定义的 时间, 频率 和 时长
<1>AT timestamp用于一次性事件
1.1.指定事件只在指定的日期和时间执行一次 timestamp为指定的日期和时间
1.2.一般使用时可以使用当前时间加上延后的一段时间(这种条款的每一部分必须以+ INTERVAL开头)
AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR//当前时间开始1小时后执行
1.3.AT后面也可以加固定的时间
<2>EVERY子句:定期重复操作
2.1.关键字AT timestamp + INTERVAL并不适用于周期性事件,对于周期性事件使用关键字EVERY
例如:EVERY 6 WEEK是指“ 每六周 ”重复执行一次
2.2.EVERY子句中不允许使用+ INTERVAL子句,但可以使用+ INTERVAL中允许的相同复杂时间单位
2.3.EVERY子句可以包含一个可选的STARTS子句
2.3.1.STARTS后跟一个时间戳值,指何时应该开始重复动作
2.3.2.还可以使用+ INTERVAL间隔来指定“从现在开始”的时间量
例如:EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK //每三个月,从现在起一周后开始
2.3.3.不指定STARTS与使用STARTS CURRENT_TIMESTAMP相同:即事件指定的操作在创建事件时立即开始重复
<3>EVERY子句可以包含一个可选的ENDS子句
3.1.ENDS关键字后跟一个时间戳值,告诉MySQL事件应该何时停止重复
3.2.不使用ENDS意味着事件无限期地继续执行
(4)ON COMPLETION [NOT] PRESERVE:假如在定义event的时候有指定ENDS子句
<1>on completion preserve 的时候,当event到期了,event会被禁用(disable),但是该event还是会存在
<2>on completion not preserve的时候,当event到期的时候,该event会被自动删除掉
(5)[ENABLE | DISABLE | DISABLE ON SLAVE]:
<1>使用ENABLE关键字开启事件为活动状态
<2>使用DISABLE关键字阻止事件为活动状态
<3>DISABLE ON SLAVE被设置为复制从站上事件的状态,以指示事件在主站上创建并复制到从站,但不在从站上执行
(6)[COMMENT 'string']:
<1>使用COMMENT子句为事件提供注释
<2>注释最多为64个字符,注释文本是一个字符串文字,必须用引号括起来
(7)DO event_body:
<1>DO子句指定事件执行的动作,并由SQL语句或者调用封装好的存储过程组成
<2>几乎任何可以在存储例程中使用的有效MySQL语句也可以用作预定事件的操作语句