1. 程式人生 > >Mysql根據資料庫的時間欄位到點更新另外的狀態。

Mysql根據資料庫的時間欄位到點更新另外的狀態。

需求如下:

新增一條提醒,被提醒人在提醒時間未到達的時候收不到此提醒,提醒時間到了則更改狀態,被提醒人看到該提醒。

我們要做的就是:根據提醒時間與當前系統時間比對,如果提醒時間小於等於當前時間時候,更改狀態為正常狀態值。

實現如下:

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;