項目情況:
今天項目中涉及到一個註冊問題,註冊的校驗碼需要定時刪除。(後來需求變了,採用SpringBoot自帶的方法來執行定時任務)
說明:我在這裏是根據註冊記錄表中的一個更新時間字段和數據庫當前時間進行比較,得出該記錄存在的時間。使用timstampdiff函數可以解決該問題。
具體sql如下:
#開啓event_scheduler sql指令
SHOW VARIABLES LIKE '%event_scheduler%';SET GLOBAL event_scheduler = ON;
#定義存儲過程
DELIMITER |
DROP PROCEDURE IF EXISTS delete_registcode |
CREATE PROCEDURE delete_registcode()
BEGIN
IF EXISTS(SELECT id FROM registinfo WHERE TIMESTAMPDIFF(MINUTE,lastupdatetime,NOW()) >= 15 ) THEN
-- UPDATE device SET state = FALSE WHERE id NOT IN (SELECT device_id FROM orderdetail WHERE NOW() < endtime);
DELETE from registinfo where id in (select id from (SELECT id FROM registinfo WHERE TIMESTAMPDIFF(MINUTE,lastupdatetime,NOW()) >= 15)a ) ;
END IF;
END
|
DELIMITER;
#創建定時器,每間隔一秒調用一次存儲過程
DELIMITER |
DROP EVENT IF EXISTS event_remind_status |
CREATE EVENT event_remind_status
ON SCHEDULE EVERY 1 SECOND DO
BEGIN
CALL delete_registcode();
END |
DELIMITER;
#啓動定時器
ALTER EVENT event_remind_status ON
COMPLETION PRESERVE ENABLE;