概念
Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除数据等操作,无需人工干预。
优势:
- 自动化:可以定期执行重复性的任务,无需手动干预。
- 灵活性:可以根据需求定制事件,灵活控制任务的执行时间和频率。
- 提高效率:可以在非高峰时段执行耗时任务,减少对数据库性能的影响。
常见的应用场景有定时备份数据库,清理和统计数据。
常见操作
事件调度器操作
查看事件调度器是否开启:ON 表示已开启。
show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
开启和关闭事件调度器:
# 开启事件调度器
set global event_scheduler = ON;
# 关闭事件调度器
set global event_scheduler = OFF;
更改配置文件:进入 my.ini 文件修改,重启 Mysql 服务器,永久生效。
# 事件调度器启动状态
event_scheduler = on
查看事件
使用 show 或者 select 语句查看当前数据库中所有的事件。
show events;
select * from information_schema.events;
创建事件
使用 create event 语句创建一个事件,
基本语法:
create
[definer = user]
event
[if not exists]
event_name
on schedule schedule_body
[on completion [not] preserve]
[enable | disable | disable on slave]
[comment 'comment']
do event_body;
- definer:可选,用于定义事件执行时检查权限的用户。
- if not exists:可选,一般都加上,用于判断要创建的事件是否存在。
- event_name:定义指定的事件名,是用来唯一标识事件的名称。在同一个数据库中,事件名称必须是唯一的。
- on schedule schedule_body:schedule_body 用于定义执行的时间和时间间隔。
- on completion [not] preserve:可选,指定事件是否循环执行,默认为一次执行,即 not preserve。
- enable | disable | disable on slave:可选,指定事件的一种属性,enable 表示启动,disable 表示关闭或者下线,disable on slave 表示从属性上禁用,默认启动
- comment ‘comment’:可选,添加事件的注释。
- do event_body:必选,event_body 用于指定事件启动时所要执行的代码,可以是任何有效的sql 语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用 begin … end 复合结构。
schedule_body
语法:
at timestamp [+ interval interval