Mysql根據資料庫的時間欄位到點更新另外的狀態。
阿新 • • 發佈:2019-02-07
需求如下:
新增一條提醒,被提醒人在提醒時間未到達的時候收不到此提醒,提醒時間到了則更改狀態,被提醒人看到該提醒。
我們要做的就是:根據提醒時間與當前系統時間比對,如果提醒時間小於等於當前時間時候,更改狀態為正常狀態值。
實現如下:
1. 開啟event_scheduler 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;
2. 定義儲存過程
DELIMITER | DROP PROCEDURE IF EXISTS update_remind_status | CREATE PROCEDURE update_remind_status() BEGIN IF exists (select id from remind where status='1' and SYSDATE()>=remind_time) THEN update remind_receive set `status`='1' where remind_id in (SELECT id from remind where `status`='1' and SYSDATE()>=remind_time) and `status`='3'; END IF; END | DELIMITER;
3. 建立定時器,每間隔一秒呼叫一次儲存過程。
DELIMITER //
CREATE EVENT event_remind_status
ON SCHEDULE EVERY 1 second do
begin
call update_remind_status();
end //
DELIMITER;
4.啟動定時器ALTER EVENT event_remind_status ON
COMPLETION PRESERVE ENABLE;