做圖書管理系統時,有一項需求是預約書籍後兩小時後預約失效。我們預約的資料表是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 已打開。
2.建立event
在 navicat 中建立事件。
①在定義中輸入每次需要執行的SQL語句
其中,TIMESTAMPDIFF() 函數執行時間的減法,NOW() 函數得到目前的時間。
更多SQL對于時間操作的函數可以參見 w3school 的SQL教學:我是連結
②在計劃中輸入語句執行的頻率,我的是每10秒執行一次
③可以在SQL預覽中檢視event語句,之後儲存就好了
我 event 建立好後,就發現以前建立的兩個 borrow 行自動删除了。