做图书管理系统时,有一项需求是预约书籍后两小时后预约失效。我们预约的数据表是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 行自动删除了。

Logo

快速构建 Web 应用程序

更多推荐