MySQL事件详解
事件
1、简介
- 事件是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”
- 事件取代了原先只能由操作系统的计划任务来执行的工作
- MySQL的事件调度器可以精确到每秒钟执行一个任务
- 操作系统的计划任务只能精确到每分钟执行一次
2、开启事务
-
查看是否开启
-
-- 是否开启 show variables like '%event_scheduler%'; -- 如果是关闭的(临时开启) set global event_scheduler = on; -- 如果是关闭的(长久开启) -- 修改my.ini中mysqld数据 event_scheduler=on
3、创建事件
-
一条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_mmonth | day_hour | day_minute |
day_second | hour_minute | hour_second | minute_second}
# definer:定义事件执行的时候检查权限的用户。
# event_name:表示事件名称
# schedule:表示触发点
# at timestamp 一般用于只执行一次
# every interval 一般用于周期性执行,可以设定开始时间和结束时间
# on completion preserve:表示任务执行后仍保留
# on completion not preserve:表示任务执行完成后不保留
# enable | disable: 表示设置启用或者禁止这个事件
# comment:添加注释
案例:
-- 立即启动事件
create event event_now
on schedule
at now()
do insert into events_list values('event_now',now());
-- 10分钟后自动清空表
create event if not exists event_truncate_test2
on schedule
at current_timestamp + interval 10 minute
do truncate table test2;
-- 每分钟启动事件
create event event_minute
on schedule
every 1 minute
do insert into events_list values('event_now',now());
-- 5天后开启每天定时三秒向表test2中插入数据,一个月后停止执行
create event if not exists event_truncate_test3
on schedule
every 3 second
starts current_timestamp + interval 5 day
ends current_timestamp + interval 1 month
on completion preserve
do insert into test2(department,time_v) values('1',now());
-- 每秒钟调用存储过程
create definer=`root`@`localhost`event`eventUpdateStatus`
on schedule
every 1 second
starts '2023-06-07 13:05:45'
on completion preserve
enable
do call updateStatus();
-
启用禁用
-
alter event event_name disable; alter event event_name enable;
-
-
删除
-
drop event [if exists] event_name;
-