做图书管理系统时,有一项需求是预约书籍后两小时后预约失效。我们预约的数据表是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 已打开。
SHOW VARIABLES LIKE 'event_scheduler';
2.创建event
在 navicat 中新建事件。
①在定义中输入每次需要执行的SQL语句
其中,TIMESTAMPDIFF() 函数执行时间的减法,NOW() 函数得到当前的时间。
更多SQL对于时间操作的函数可以参见 w3school 的SQL教学:我是链接
②在计划中输入语句执行的频率,我的是每10秒执行一次
③可以在SQL预览中查看event语句,之后保存就好了
我 event 创建好后,就发现以前创建的两个 borrow 行自动删除了。