[数据库] Navicat for MySQL事件Event实现数据每日定期操作 |
您所在的位置:网站首页 › 数据库如何实现定时任务管理 › [数据库] Navicat for MySQL事件Event实现数据每日定期操作 |
在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如: (1).每天凌晨12点对数据库进行定时备份,结算和汇总; (2).每天凌晨2点删除数据库前三天的数据; (3).插入某个数据超过一定时间改变某个值的状态,比如预警系统。 这里就需要通过Event事件进行简单操作,下面将详细处理。你可能会想到通过触发器实现,但是如果是同一张表Insert插入数据后,但是触发器再进行Update更新操作是不行的,所以需要尝试通过Event事件解决。 在前面讲过一篇文章:[数据库] Navicat for MySQL触发器更新和插入操作 希望这篇文章对你有所帮助,如果文章中出现错误或不足之处,还请海涵~ 一. Event实现每日某个时刻删除事件首先通过Navicat for MySQL查看Event事件是否开启,具体代码: show variables like '%sche%'; 通常事件是开启的,如下图所示:如果没有开启,需要数据库超级权限设置。 set global event_scheduler =1; 其中event_scheduler为ON表示开启,OFF表示关闭,如下: +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 下面开始写事件进行操作。 假设现在存在一张表loginuser,包括用户名、密码、权限三个字段。如下图:点开事件如下图所示,但我更推荐大家写SQL语句。 在使用事件Event中,需要开启和关闭事件,使用的代码如下: 关闭事件:ALTER EVENT testevent DISABLE; 开启事件:ALTER EVENT testevent ENABLE; 查看事件是否开启的代码如下: SELECT * FROM mysql.event; 输出如下图所示:假设现在有一个报警系统,当用户进入房间开始计时,当用户在放在中待了2小时就开始报警,设置状态。数据如下: 现在的更新UPDATE的语句如下所示: CREATE EVENT updateevent ON SCHEDULE EVERY 10 SECOND DO update logininfo set STATE=0 WHERE timestampdiff(SECOND,starttime,current_timestamp)>300 and STATE=1; 然后查询实时更新状态的SQL语句如下: select ID, STATE, current_timestamp, starttime, timestampdiff(SECOND,starttime,current_timestamp) as T from logininfo; 输出如下图所示,发现302可能是查过300秒,可能实时更新的延误,但不影响效果的。讲到这里,一个简单预警系统的数据库就设置完成,总共我们设置了3个事件,如下图所示: 补充一段代码: delimiter // CREATE EVENT e ON SCHEDULE EVERY 5 SECOND DO BEGIN DECLARE v INTEGER; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; SET v = 0; WHILE v < 5 DO INSERT INTO t1 VALUES (0); UPDATE t2 SET s1 = s1 + 1; SET v = v + 1; END WHILE; END // delimiter ; 最后希望文字对您有所帮助,基础性文章,如果存在错误或不足之处,还请海涵~ 最近自己和她太操劳,自己需要多付出点,多学点,多为她做点,forever。 (By:Eastmount 2017-03-10 中午12点 http://blog.csdn.net//eastmount/ ) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |