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;
      
posted @ 2023-06-07 17:18  、怪咖  阅读(155)  评论(0编辑  收藏  举报