-
1 # 嬞菇涼
-
2 # 使用者1465424935672
使用event_scheduler實現,這是個事件的自動排程機制,會定期執行事件中定義的語句;
1 配置開啟event scheduler
配置my.ini檔案 中加上 event_scheduler = 1
重啟mysql服務
驗證event_scheduler是否已經開啟: show variables like "%event%"; #值為 ON 表明已開啟
2 建立event
drop event event_test_a;
CREATE EVENT event_test_a
ON SCHEDULE EVERY 1 day STARTS date_add(concat(current_date(), " 00:00:00"), interval 0 second)
ON COMPLETION PRESERVE ENABLE
DO
delete from dbname.`user` where (`name`, `time` ) =
(
select `name`, max_time from
(select `name`, max(`time`) max_time from dbname.`user` group by 1) t
where max_time
);
#說明:
ON SCHEDULE EVERY 1 day 指定迴圈間隔為每天執行
STARTS date_add(concat(current_date(), " 23:59:00"), interval 0 second) 指定執行時間為23:59:00
ON COMPLETION PRESERVE ENABLE 指定建立完成後即啟用,否則需手動啟動
替換DO後邊的語句中的相關部分(如資料庫dbname, 表名,欄位名等),DO 中也可以執行一個自定義的儲存過程(該儲存過程自已實現業務邏輯)
3 察看是否開始工作
SHOW PROCESSLIST; --看是否有event_scheduler的user的程序;
4 手動關閉事件
ALTER EVENT event_test_a DISABLE;
5 手動該事件為可用
ALTER EVENT event_test_a ENABLE;
回覆列表
--清空全部資料,不寫日誌,不可恢復,速度極快
truncatetable表名;
--清空全部資料,寫日誌,資料可恢復,速度慢
deletefrom表名
dropfrom表名