1.mysql事件/定时器开启
(1)SELECT * FROM mysql.event;
(2)SHOW VARIABLES LIKE 'event_scheduler';-- 查看是否开启定时器
<1>如果显示OFF,则输入以下语句开启:
SET GLOBAL event_scheduler = on
SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on
<2>虽然开启了事件,但是每次重启电脑或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF)
<3>想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间
<4>只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可
(3)ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE;-- 开启事件
(4)ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE; -- 关闭事件
2.MySQL事件创建过程
(1)创建存储过程,这里的存储过程主要提供给mysql的定时器event来调用去执行:
<1>如果是复杂的sql逻辑语句,可以使用存储过程
<2>如果是简单的sql语句,可以使用存储过程也可以直接将sql语句追加在event的do后面(do+sql语句)
<3>简单应用实例:这里是简单sql,BEGIN...END部分也可以写在event的do后面
create procedure mypro()
BEGIN
insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());
END;
(2)紧接着创建mysql的定时器event:这里设置为每一秒执行一次
create event if not exists eventJob
on schedule every 1 second
on completion PRESERVE
do call mypro();
或者
do insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());
(3)至此准备工作已经写完了,mysql要想利用定时器必须的做准备工作,就是把mysql的定时器给开启:
<1>这一步是使用定时器必须要做的,但是顺序无所谓,
<2>可以在(1)(2)之前或者之后都可以
(4)紧接着还要开启事件
<1>这一步必须要在开启定时器,创建事件完成之后进行
<2>因为开启事件要使用创建的事件名称
(5)查看定时器状态:
<1>这一步的顺序无所谓但必须要有,是用来查看定时器是否开启
<2>如果定时器没有开启,创建的事件是无法使用的
3.事件应用实例:
(1)每隔一秒自动调用e_test()存储过程
CREATE EVENT IF NOT EXISTS event_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();
(2)从现在开始每隔九天定时执行
CREATE EVENT EVENT1
ON SCHEDULE EVERY 9 DAY STARTS NOW()
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL TOTAL(); //调用存储过程
END
(3) 每个月的一号凌晨1 点执行
CREATE EVENT EVENT2
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL
DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL STAT(); //调用存储过程
END
(4)每个季度一号的凌晨2点执行
CREATE EVENT TOTAL_SEASON_EVENT
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-
',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL SEASON_STAT(); //调用存储过程
END
(5) 每年1月1号凌晨四点执行
CREATE EVENT TOTAL_YEAR_EVENT
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-
',1)),INTERVAL 4 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL YEAR_STAT(); //调用存储过程
END