事件
**检查数据库事件是否开启:**如果event_scheduler 状态是on 即为开启状态:
select @@event_scheduler; ---法一
show variables like "event_schduler%"; --法二
开启事件
set global event_scheduler=1
关闭事件
set GLOBAL event_schduler=OFF;
创建事件
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}
参数详细说明:
DEFINER: 定义事件执行的时候检查权限的用户。
ON SCHEDULE schedule: 定义执行的时间和时间间隔。
ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。
COMMENT ‘comment’: 定义事件的注释。
event_body:表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,例如:
DELIMIT
BEGIN
CREATE TABLE test1;//创建表(需要测试一下)
DROP TABLE test2;//删除表
CALL proc_test1();//调用存储过程
END
注:建议命名规则
为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:动作名称_(INTO/FROM_)表名_TIME,例如:
1、每月创建(清空/删除)fans表:
create(truncate/drop)_table_fans_month;
2、每天从fans表插入(删除)数据:
insert(delete)_into(from)_fans_day;
示例:
--每天定时执行事件
create event if exits call_simontest_everyday
on schedule EVERY 1 DAY AT START "2019-06-21 14:03:00"
ON COMPLETION PRESERVER
ENABLE
DO CALL simon_test();
--在5分钟后清空simon表
create event trunt_simon_after5m
on scheduler
AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTES
do truncate table simon ;
启用事件
ALTER EVENT eventname ON COMPLETION PRESERVER ENABLE
禁用事件
ALTER EVENT eventname ON COMPLETION PRESERVER DISABLE
删除事件
DROP EVENT IF EXITS 事件名称