[数据库] 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,包括用户名、密码、权限三个字段。如下图:




        当前时间点为2017年3月9日 23:48,我们设置23:50执行删除eastmount数据操作。其中SQL语句的Event代码如下:
CREATE EVENT testevent
	ON SCHEDULE EVERY 1 DAY STARTS '2017-03-09 23:50:00'
  DO
		delete from loginuser where Username='eastmount';
        创建事件可以查看到的,如下图所示:



        然后过了23:50执行查询语句就会发现eastmount用户已经被删除。


        点开事件如下图所示,但我更推荐大家写SQL语句。



        通过上面这段SQL语句,我们知道了最简单的Event事件,下面进一步加深介绍。备份数据加个备份SQL语句执行即可。
        参考官网:https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html


二. Event实现每隔某段时间定时插入事件

        在使用事件Event中,需要开启和关闭事件,使用的代码如下:
        关闭事件:ALTER EVENT testevent DISABLE;
        开启事件:ALTER EVENT testevent ENABLE;
        查看事件是否开启的代码如下:

SELECT * FROM mysql.event;
        输出如下图所示:


        下面定义每隔10秒插入一行数据的事件,比如实时接收交通数据信息等实时处理,通常会使用该方法进行插入操作。创建一个表logininfo,记录登录信息,字段包括:ID序号(主键、递增INT型)、NAME用户名、STARTTIME(登录时间)、ENDTIME(登出时间)、STATE(状态 0-离线 1-在线)。


        SQL语句创建EVENT事件如下:
CREATE EVENT insertevent
    ON SCHEDULE EVERY 10 SECOND 
    DO
				INSERT INTO logininfo(NAME,STARTTIME,STATE) values('test01',now(),'1');
        运行结果如下图所示:


        从图中可以看到,每隔10秒就插入一组数据,该事件正确执行。
        注意:在真实的开发过程中,会遇到mysql服务重启或断电等情况,此时则会出现时间调度器被关闭的情况,所有事件都不起作用,解决方法,需要在mysql.ini文件中加入 "event_scheduler = ON;" 语句。



三. Event实现超过某个时间更新状态

        假设现在有一个报警系统,当用户进入房间开始计时,当用户在放在中待了2小时就开始报警,设置状态。数据如下:


        SQL语句查询返回结果如下:

select current_timestamp, starttime, timestampdiff(SECOND,starttime,current_timestamp) as T from logininfo;
        输出结果如下图所示,每隔10秒会插入一个数据,所以不断更新。

        现在的更新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/ )



  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
Navicat for MySQL 是一款非常强大的MySQL数据库管理工具,可以进行多种数据库优化操作。以下是使用 Navicat for MySQL 优化数据库操作方法: 1. 数据库性能分析:在 Navicat for MySQL 中,可以使用“Monitor”工具来进行数据库性能分析。进入“Monitor”工具后,选择需要分析的数据库,然后在“Overview”选项卡中可以查看数据库的整体性能状况,包括连接数、查询数、缓存命中率、CPU使用情况等。在“Sessions”选项卡中可以查看当前正在执行的 SQL 语句,以及它们的执行时间、执行计划等信息。 2. 查询优化:在 Navicat for MySQL 中,可以使用“Query Analyzer”工具来进行查询优化。在“Query Analyzer”工具中,输入需要优化的 SQL 语句,然后选择“Explain”选项卡,即可查看 SQL 语句的执行计划。通过分析执行计划,可以找出 SQL 语句的性能问题,并进行优化。优化方法包括添加索引、修改查询条件等。 3. 索引优化:在 Navicat for MySQL 中,可以使用“Index”工具来进行索引优化。进入“Index”工具后,选择需要优化的表,然后查看当前表的索引情况。如果存在问题索引,可以删除或修改它们。如果需要添加索引,可以选择需要添加的字段,然后点击“Create”按钮即可。 4. 数据库参数调优:在 Navicat for MySQL 中,可以使用“Variable Manager”工具来进行数据库参数调优。进入“Variable Manager”工具后,可以查看当前数据库的参数设置,包括缓存大小、连接数、最大连接数等。根据实际情况,可以适当调整这些参数,以提高数据库的性能表现。 需要注意的是,以上操作都需要有一定的专业技能,建议进行前期学习和实践。同时,在进行优化操作前需要备份数据库,以免误操作导致数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eastmount

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值