程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql使用存儲過程和Event事件定期刪除數據

Mysql使用存儲過程和Event事件定期刪除數據

編輯:MySQL綜合教程

整個過程總共分為三步:

1. 寫存儲過程

2. 寫Event事件

3. 把Event事件設置成Enable並打開事件任務

1. 存儲過程

首先定義一個存儲過程,del_data,傳入一個int參數就是保留的log內容天數,過程的內容就是刪除t_xxx表一周外的數據和刪除t_log表的保留天數外的數據。

create procedure del_data(IN `date_inter` int)
begin
	delete from t_xxx where date < date_sub(curdate(),interval 7 day);
	delete from t_log where date < date_sub(curdate(),interval date_inter day);
end 

2. 寫Event事件

定義del_event,在Event事件中定義事件執行的開始事件和頻率,事件設置成Enable,並且到點的時候執行del_data存儲過程(傳進去的天數是30天)。

create event del_event  
on schedule 
EVERY 1 day  
STARTS '2014-01-01 03:00:00'  
ON COMPLETION  PRESERVE ENABLE  
do  call del_data(30)

還可以控制事件的開啟個關閉:

關閉事件任務: alter event del_event ON COMPLETION PRESERVE DISABLE;
開戶事件任務: alter event del_event ON COMPLETION PRESERVE ENABLE;

你也可以使用show events看看剛才新建的事件。

3. 打開事件任務

查看event是否開啟: show variables like '%sche%';
將事件計劃開啟: set global event_scheduler = ON; 

當然,你也可以把存儲過程寫在Event事件中,就是不太規范啦:

delimiter |

CREATE EVENT e_daily
    ON SCHEDULE
      EVERY 1 DAY
    COMMENT 'Saves total number of sessions then clears the table each day'
    DO
      BEGIN
        INSERT INTO site_activity.totals (time, total)
          SELECT CURRENT_TIMESTAMP, COUNT(*)
            FROM site_activity.sessions;
        DELETE FROM site_activity.sessions;
      END |

delimiter ;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved