MySQL-事件總結


  是什么?事件是一組SQL集合,簡單說就是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}

說明:

  #DEFINER:定義事件執行的時候檢查權限的用戶。
  #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;

#清空表
TRUNCATE TABLE `user`;

四:測試存儲過程

DELIMITER $$
DROP PROCEDURE IF EXISTS `ADD_USER`$$
CREATE PROCEDURE `ADD_USER`()
BEGIN
INSERT INTO `user`(NAME, address,ADDTIME) VALUES('AT','AT',NOW());
END$$
DELIMITER ;

五:事件案列

#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 `event2`;
DELIMITER ;;
CREATE EVENT `event2` 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();
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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM