事件创建的语法:
CREATE
[DEFINER = user]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
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}
前置工作:
1、看一下事件的设置是否开启了
show variables like 'event_scheduler';
2、若前一步显示的values是“off”,就需要,开启事件
set global event_scheduler = on;
3、若想关闭事件,可执行下列 sql 语句
set global event_scheduler = off;
小示例:
1、创建我们的表:
drop table if exists dina_test_table;
create table Dina_test_table(
id int(11) not null AUTO_INCREMENT,
insert_time datetime,
after_six_day date,
primary key (`id`))
2、创建一个简单的无参数的存储过程
drop procedure if exists dina_test_procedure;
create procedure dina_test_procedure()
begin
insert into dina_test_table values(null,now(),date_add(current_date(),interval 6 day));
end
注:若想了解一下存储过程中的一些语法 或 mysql 中的常用日期函数 ,可点击此处:存储过程、日期函数;
3、创建 一个每隔10 秒执行一次存储过程的 事件:
drop event if exists dina_test_events_1;
create event dina_test_events_1
on schedule every 10 second
on completion preserve -- 该事件执行完成后,不会被 drop 掉
do call dina_test_procedure();
执行后的效果:
4、创建一个这个月 每天 凌晨 都会执行 一次存储过程的 事件:
drop event if exists dina_test_events_2;
create event dina_test_events_2
on schedule every 1 day -- 可以改成一天、一个星期、一个月
starts '2020-05-01 00:00:00' -- 事件执行的开始时间
ends '2020-05-31 00:00:00' -- 到了设定的时间,该事件就会停止执行
on completion preserve -- -- 该事件停止执行后,不会被 drop 掉
do call dina_test_procedure();
5、创建一个在 30 分钟后清空 dina_test_table 表数据的 事件 :
-- 注:该事件执行完成后 会被drop 掉
drop event if exists dina_test_events_3;
create event dina_test_events_3
on schedule at current_timestamp + interval 30 minute -- 在当前的时间戳的基础上加上 30 minute 就会执行此事件
do truncate table dina_test_table; -- 清空 表 dina_test_table
4、 查看我们刚才创的事件的一些信息,包括事件的名称、时间开始&结束的时间等
select * from mysql.event;
若本文哪里有错误的,望指正,谢谢!!!!