MySQL-事件总结

#查询事件变量,如果查询不到变量,说明数据库版本过低,不支持事件。
SHOW VARIABLES LIKE 'event_scheduler';
#开启事件,如果想要每次重启数据库服务后,事件仍然生效需要在mysql.ini文件中加入event_scheduler = ON; 的语句
SET GLOBAL event_scheduler = ON;
#查询数据库所有创建的事件
SELECT * FROM mysql.event;
#开启事件任务
ALTER EVENT event1 ENABLE;
#关闭事件任务
ALTER EVENT event1 DISABLE;
#查看事件的定义
SHOW CREATE EVENT event1;

#创建事件语法
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_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

#event_name表示事件名称
#schedule表示触发点,AT timestamp一般用于只执行一次。EVERY interval一般用于周期性执行,可以设定开始时间和结束时间。
#ON COMPLETION PRESERVE:表示任务执行之后仍保留
#ON COMPLETION NOT PRESERVE:表示任务执行完成后不保留
#ENABLE|DISABLE:表示设置启用或者禁止这个事件。
#COMMENT:添加注释

#测试表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` VARCHAR(200) NOT NULL COMMENT '收货人',
`address` VARCHAR(100) NOT NULL COMMENT '收货地址',
`addtime` DATETIME NOT NULL COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

#测试存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `ADD_USER`$$
CREATE PROCEDURE `ADD_USER`(IN add_time DATETIME)
BEGIN
INSERT INTO `user`(NAME, address,ADDTIME) VALUES('AT','AT',add_time);
END$$
DELIMITER ;

#清空表
TRUNCATE TABLE `user`;

#1.每隔3秒
DROP EVENT IF EXISTS `event1`;
DELIMITER ;;
CREATE EVENT `event1` ON SCHEDULE EVERY 3 SECOND ON COMPLETION PRESERVE DISABLE COMMENT ''
DO
BEGIN
INSERT INTO `user`(NAME, address,ADDTIME) VALUES('test1','test1',NOW());
END
;;
DELIMITER ;

#2.每天几点几分
DROP EVENT IF EXISTS `event3`;
DELIMITER ;;
CREATE EVENT `event3` ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(),INTERVAL 3 HOUR),INTERVAL 30 MINUTE) ON COMPLETION PRESERVE ENABLE COMMENT ''
DO
BEGIN
CALL ADD_USER(NOW());
END
;;
DELIMITER ;

#9号凌晨1点
SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-9 DAY),INTERVAL 1 HOUR);
#1分钟后
SELECT NOW()+INTERVAL 1 MINUTE;
#凌晨3点
SELECT DATE_ADD(CURDATE(),INTERVAL 3 HOUR);
#凌晨3点30分
SELECT DATE_ADD(DATE_ADD(CURDATE(),INTERVAL 3 HOUR),INTERVAL 30 MINUTE);

猜你喜欢

转载自www.cnblogs.com/lbky/p/10046006.html