一、什么是事件?
一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,
事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;
二、查看事件是否开启:SHOW VARIABLES LIKE 'event_scheduler';
开启事件:
SET GLOBAL event_scheduler = ON;
- SET @@global.event_scheduler = ON;
- SET GLOBAL event_scheduler = 1;
- SET @@global.event_scheduler = 1;
关闭事件:
- SET GLOBAL event_scheduler = OFF;
- SET @@global.event_scheduler = OFF;
- SET GLOBAL event_scheduler = 0;
- SET @@global.event_scheduler = 0;
三、查看事件
查看当前所在数据库的事件:SHOW EVENTS; SHOW PROCESSLIST;
查看数据库中所有的事件:SELECT * FROM mysql.event;
四、事件的控制
临时关闭事件
ALTER EVENT 事件名 DISABLE;
打开
ALTER EVENT 事件名 ENABLE;
删除事件
DROP EVENT 事件名;
五、定时执行事件
DELIMITER $$
/*创建定时事件*/
CREATE EVENT `demo`.`comm`
/*指定时间执行*/
ON SCHEDULE AT '2021-09-27 16:34:00'
/*完成时不保留启用 执行完成之后删除事件*/
ON COMPLETION NOT PRESERVE ENABLE
DO
BEGIN
UPDATE `commodity` SET `c_number` = 1;
END$$
DELIMITER ;
六、循环执行事件
DELIMITER $$
/*创建事件*/
CREATE EVENT `demo`.`addmoeny`
/*循环执行 间隔时间为1天*/
ON SCHEDULE EVERY '1' DAY/*SECOND(秒)*/
/*循环的开始时间*/
STARTS '2021-09-27 00:00:00'
/*循环的结束时间*/
ENDS '2022-04-29 00:00:00'
/*完成时不保留启用*/
ON COMPLETION NOT PRESERVE ENABLE
/*开始*/
DO BEGIN
UPDATE myuser SET `u_money` = `u_money` + 10;
/*结束*/
END$$
DELIMITER ;
抢单系统所用事件
DELIMITER $$
ALTER DEFINER=`root`@`localhost` EVENT `productdateshelt`
ON SCHEDULE EVERY 1 SECOND
STARTS '2021-10-07 19:44:54'
ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
UPDATE `product` SET `p_buy` = 1 WHERE TIMESTAMPDIFF(SECOND,`p_create_date`,NOW())>=0;
END$$
DELIMITER ;
每秒调用事件,执行SQL语句,当前时间与上架时间相同时修改字段,实现商品上架