[数据库] 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/ )

时间: 2024-10-01 03:34:01

[数据库] Navicat for MySQL事件Event实现数据每日定期操作的相关文章

重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是数据库和实例: 数据库:物理操作文件系统或其他形式文件类型的集合: 实例:MySQL 数据库由后台线程以及一个共享内存区组成: 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍. 数据

如何更好地管理你的数据库——navicat(mysql)

即使安装了navicat这样好的管理工具,没有真正的后面力量也是不行的,也就是说有枪没子弹只能是空炮,所以啊数据库的安装是必须的,这里以mysql安装为例. 1.      安装 关于mysql的安装,存在两种方式,一种是安装版,另一种是绿色版,也就是解压和配置即可使用的.          安装版的很简单,就是从网上进行下载,点击安装即可,不过一般建立安装在默认的路径下或者是只是修改磁盘的名字,安装目录不建议使用中文或者目录中写有中文的.          绿色版或者解压缩版,解压缩版的也是建

C#操作mysql数据库,往mysql读取或者写入数据

最近在开发的一个项目,需要将数据存贮在mysql数据库中,于是需要写一个操作mysql的帮助类,我采用的是官方的,还是先给出一个链接,后面有时间的话,继续更新. http://blog.csdn.net/newtelcom/article/details/50609490

MySQL 事件EVENT

一.用途用于某一时间执行一个事件或周期性执行一个事件. 二.语法CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] DO event_body; 基本点:schedule: AT

【Flume】【源码分析】flume中事件Event的数据结构分析以及Event分流

前言 首先来看一下flume官网中对Event的定义 一行文本内容会被反序列化成一个event[序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据],event的最大定义为2048字节,超过,则会切割,剩下的会被放到下一个event中,默认编码是UTF-8,这都是统一的. 但是这个解释是针对Avro反序列化系统中的Event的定义,而flume ng中很多event用的不是这个,所以你只要记住event的数据

Mysql入门到精通之数据表的操作

修改表 ALTER TABLE tb_name; 1.添加字段 ALTER TABLE tb_name ADD 字段名字 字段类型 约束条件 [FIRST/AFTER 字段名称] 1>添加用户名字段 ALTER TABLE test ADD username VARCHAR(20); 2>将字段test添加到表中第一个字段 ALTER TABLE test ADD test VARCHAR(20) FIRST; 3>在id之后添加年龄字段 ALTER TABLE test ADD age

mysql学习笔记——对数据记录查询操作的补充(单表内查询)

select ... from ... where ... group by ... having ... order by ... limit...; (顺序固定) 1.select 指定所要检索的字段(列) select 后加distinct关键字,则可去除重复的记录,其中,重复的记录是指 所有字段值都相同的记录 2.from 指定查询数据表,可以是表名,也可以是别名 通常是在一个表达式不易读取时,对其取别名: 表达式 as 别名; 3.where 前置过滤条件 --- 将表数据过滤掉一部分

如何使用navicat for mysql连接本地数据库,并且导入数据文件

如何使用navicat for mysql连接本地数据库,并且导入数据文件 1. 简介 navicat for mysql是一种数据库管理工具, 专门用于简化, 开发和管理MySQL.我们可以使用navicat for mysql来连接远程数据库,也可以连接本地数据库.使用这个工具,查看表的数据非常方便,也可以输入SQL命令来实现查询.但是输入创建表等命令就不是很方便了.好了,我们一起来看看怎么使用navicat for mysql 创建并查询数据库中的数据. 2. 连接数据库 首先,你得确认你

Navicat for mysql 导入导出数据表数据库

1.导出数据表 联通 如图所示,右击所要进行导出的表格,选择 Dump SQL File 下面的选项是只导出数据表结构,没有数据 上面的选项包含数据,连同表结构带着数据一同进行导出 2.导入数据表 选择数据库,右击进入,选择 Excute SQL File,自动弹出文件选择的列表,找到想要的文件,进行导入 3.导出数据库 操作方式与导出数据表相似,只是这部分变成了右击数据库来进行操作. 4.导入数据库 严格意义上来讲,导出的数据库文件只是一堆表结构关系,导入数据库文件本质上就是讲这些表导进来,操