標籤:mysql event 預存程序 定時刪除
預存程序:
1. MySQL 5.0 以後開始支援預存程序。
2. 我們常用的SQL語句在執行的時候需要先編譯,然後執行,而預存程序是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中(因而執行速度比較快),使用者通過制定存錯過程的名字並給定參數來調用執行它。
Event事件:
1. MySQL 5.1以後開始引入event概念;
2. event 即“時間觸發器”,通過在特定時間觸發SQL語句或者預存程序執行。
MySQL 定時刪除資料實現方法:mysql預存程序 + event事件
1. 寫預存程序
DELIMITER //
create procedure del_data(IN `date_inter` int) //建立預存程序, IN表示需要傳入一個參數
begin
delete from EPISODE_CCM_GENERAL_INFO where time < date_sub(curdate(), interval date_inter day);
delete from EPISODE_CEM_GENERAL_INFO where time < date_sub(curdate(),interval date_inter day);
end //
DELIMITER ;
格式注意:
a. 這裡的DELIMITER // :
DELIMITER是關鍵字,這句的作用是聲明分隔字元為//,由於MySQL預設以“;”為分隔字元,如果沒有聲明新的分隔字元,編譯器會把預存程序當做SQL語句進行處理,預存程序的編譯過程就會報錯。所以事先聲明當前段的分隔字元是‘//‘, 預存程序不會執行這些代碼。DELIMITER ; 是將分隔字元還原。
b. IN 輸入參數,OUT輸出參數,INOUT表示輸入輸出參數
c. 預存程序體的開始與結束用begin,end來標識;
d. curdate()返回當前的日期,e.g. 2015-06-18
curtime()返回目前時間,e.g. 14:12:09
now() 返回當前日期和時間,e.g. 2015-06-18 14:12:09
date_sub()函數,從日期減去指定的時間間隔;
e. 查看預存程序命令:show procedure status where db = "dbname";
f. 刪除預存程序命令:drop procedure;
g. delete語句表示刪除date_inter天前的資料。
2. 寫event事件
create event del_event
on schedule
EVERY 1 day
STARTS ‘2015-05-11 13:00:00‘
ON COMPLETION PRESERVE ENABLE
do call del_data(90)
a. 查看是否開啟event:
show variables like "event_scheduler";
b. 開啟event: (1: on 0 :off)
set global event_scheduler = 1;
c. on schedule 計劃任務,有兩種方式:
i). at 時間戳記,用來完成單次的計劃任務;
ii). every 時間,用來完成重複的計劃任務;時間可以使用:year, month, day, hour, minute,seconds等。
d. on completion [not] preserve
on completion 表示當這個事件不會再發生的時候,preserve表示事件執行完畢後不會被drop掉。
enable /disable表示開啟/關閉事件。
可以通過alter event event_name enable/disable變更事件的開啟或關閉;
e. call del_data是調用預存程序;
f. show events 查看事件;
MySQL 定時刪除資料