第13节-MySQL事件调度器
14.1、事件调度器使用场景
数据库管理是一项重要且烦琐的工作,许多日常管理任务往往会频繁地﹑周期性地执行,例如定期维护索引﹑定时刷新数据﹑定时关闭帐户﹑
定义打开或关闭数据库等操作,实际应用中,数据库管理员会定义事件对象以自动化完成这些任务。本任务将详细介绍MySQL中事件调度的创建﹑维护和管理等。
14.2、事件调度器介绍
1、事件是在特定时刻调用的数据库对象。 2、一个事件可调用一次,也可周期性的被调用,它由一个特定的线程来管理,也就是“事件调度器” 3、事件调度器取代了原先只能由操作系统的计划任务来执行的工作。 4、 MySQL的事件调度器可以精确到每秒钟执行一个任务 5、事件在实时性要求较高的应用(如股票﹑期货等)中广泛使用 6、事件调度器是MySQL数据库服务器的一部分 7、负责事件的调度,它不断监视某个事件是否需要被调用。在创建事件前,必须先打开事件调度器。 8、MySQL中的全局变量@@GLOBAL.EVENT_SCHEDULER用于监控事件调度器是否开启
14.3、事件调度器开启与关闭
14.3.1、查询事件调度器是否开启
mysql> show variables like 'event_scheduler'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 1 row in set (0.01 sec)
14.3.3、开启事件调度器
set @@global.event_scheduler=on; -- 或 set @@global.event_scheduler=1;
14.3.4、关闭事件调度器
set @@global.event_scheduler=off; -- 或 set @@global.event_scheduler=0;
14.4、事件调度器管理
14.1.1、事件的语法
1、要完成自动化作业就需要创建事件。 2、每个事件由事件调度(event schedule)和事件动作(event action)两个部分组成。 语法介绍: CREATE [DEFINER = { user | CURRENT_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}
14.1.2、创建事件
14.1.2.1、将学生表(student)的数据转移到学生历史表(student_history)
-- 复制表结构 create table student_history like student; -- at now() 立即执行 create event event_copy_student on schedule at now() do insert into student_history select * from student;
14.1.2.2、每一分钟调用存储过程,往表插入数据
-- 往表插入一条数据的存储过程 delimiter $$ create procedure add_rows() begin declare vsno varchar(20); select max(sno) into vsno from cjgl.student_history; set vsno=vsno+1; insert into student_history values (vsno,'test-event','男',100,'软件技术',now()); end$$ delimiter ; -- 每一分钟,插入一条数据 create event event_add on schedule every 1 MINUTE do call add_rows;
14.1.2.3、查看事件
show events; show create event event_add;
14.1.2.4、修改事件
-- 禁用事件与启用事件 alter event event_add disable; alter event event_add enable; -- 每15天执行1次 alter event event_add on schedule every 15 day starts '2022-11-11 03:00:00' ends '2023-11-11 03:00:00';
14.1.2.3、删除事件
drop event event_add;
14.2、实战
14.2.1、用于每过10秒钟往users表中插入一条记录
-- 要求用户名为user+当前的时间戳,时间戳可用UNIX_TIMESTAMP(now())获得。 create table users( id int auto_increment primary key, username varchar(20), cre_time timestamp default current_timestamp() ); create event event_insertuser on schedule every 10 second ends now()+600 do insert into users(username) values (concat('user',unix_timestamp(now())));