天天看點

MySQL自動删除過期資料

做圖書管理系統時,有一項需求是預約書籍後兩小時後預約失效。我們預約的資料表是Reserve(book_id,user_id,reserve_time),于是打算在MySQL裡面每隔10秒鐘删除過期的預約(目前時間-reserve_time > 7200 秒)。百度了一下,基本上都是利用event實作的。下面是利用navicat實作自動取消預約的過程以及一些要注意的問題。

1.打開 event_scheduler

在my.ini檔案(在mysql目錄下)中加入event_scheduler=ON,并注釋掉skip-grant-tables。然後重新開機mysql。

注意:指令行重新開機需要以管理者身份打開,重新開機指令為(先執行net stop mysql,再執行net start mysql)

之後在navicat輸入如下查詢語句,就可以看到 event_scheduler 已打開。

MySQL自動删除過期資料

2.建立event

在 navicat 中建立事件。

①在定義中輸入每次需要執行的SQL語句

MySQL自動删除過期資料

其中,TIMESTAMPDIFF() 函數執行時間的減法,NOW() 函數得到目前的時間。

更多SQL對于時間操作的函數可以參見 w3school 的SQL教學:我是連結

②在計劃中輸入語句執行的頻率,我的是每10秒執行一次

MySQL自動删除過期資料

③可以在SQL預覽中檢視event語句,之後儲存就好了

MySQL自動删除過期資料

我 event 建立好後,就發現以前建立的兩個 borrow 行自動删除了。