一、前言
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。
在使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1;
---或我们可以在配置my.cnf文件 中加上 event_scheduler = 1
或
SET GLOBAL event_scheduler = ON;
来开启,也可以直接在启动命令加上“--event_scheduler=1”,例如:
mysqld ... --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
或
SELECT @@event_scheduler;
或
SHOW PROCESSLIST;
二、创建事件(CREATE EVENT)
先来看一下它的语法:
view sourceprint?
1 CREATE EVENT [IF NOT EXISTS] event_name?
2 ON SCHEDULE schedule?
3 [ON COMPLETION [NOT] PRESERVE]?
4 [ENABLE | DISABLE]?
5 [COMMENT 'comment']?
6 DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
view sourceprint?
1 USE test;?
2 CREATE TABLE aaa (timeline TIMESTAMP);?
3 CREATE EVENT e_test_insert?
4 ON SCHEDULE EVERY 1 SECOND
5 DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询看看:
mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
2) 5天后清空test表:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
3 DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12点整清空test表:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
3 DO TRUNCATE TABLE test.aaa;
4) 每天定时清空test表:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE EVERY 1 DAY
3 DO TRUNCATE TABLE test.aaa;
5) 5天后开启每天定时清空test表:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE EVERY 1 DAY
3 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4 DO TRUNCATE TABLE test.aaa;
6) 每天定时清空test表,5天后停止执行:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE EVERY 1 DAY
3 ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4 DO TRUNCATE TABLE test.aaa;
7) 5天后开启每天定时清空test表,一个月后停止执行:
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE EVERY 1 DAY
3 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4 ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
5 DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):
view sourceprint?
1 CREATE EVENT e_test?
2 ON SCHEDULE EVERY 1 DAY
3 ON COMPLETION NOT PRESERVE?
4 DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]可以给该事件加上注释。
三、修改事件(ALTER EVENT)
view sourceprint?
1 ALTER EVENT event_name?
2 [ON SCHEDULE schedule]?
3 [RENAME TO new_event_name]?
4 [ON COMPLETION [NOT] PRESERVE]?
5 [COMMENT 'comment']?
6 [ENABLE | DISABLE]?
7 [DO sql_statement]
1) 临时关闭事件
ALTER EVENT e_test DISABLE;
2) 开启事件
ALTER EVENT e_test ENABLE;
3) 将每天清空test表改为5天清空一次:
ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
四、删除事件(DROP EVENT)
语法很简单,如下所示:
DROP EVENT [IF EXISTS] event_name
例如删除前面创建的e_test事件
DROP EVENT e_test;
当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;
注意:如果你将event执行了Alter event event_name disable.那么当你重新启动mysql服务
器后,该event将被删除(测试版本:5.1.30)
应用案例
本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。
* 首先创建存储过程
view sourceprint?
01 delimiter //?
02 create procedure `Slave_Monitor`()?
相关推荐
eventcreate
var createEvent = require ( 'create-event' ) ; var event = createEvent ( 'keydown' , { ctrl : true , key : 'enter' } ) ; 安装 $ npm install create-event 原料药 var createEvent = require ( 'create-...
- 包括但不限于`PLAIN`、`CUSTOM`、`CHANNEL_CREATE`、`CHANNEL_DESTROY`等各种类型,可以根据需要接收特定类型的事件。 通过深入理解mod_event_socket模块,开发者可以更灵活地控制FreeSwitch的行为,实现远程...
CREATE EVENT delete_old_data ON SCHEDULE EVERY 1 DAY STARTS '02:00:00' DO DELETE FROM your_table WHERE date_column (NOW(), INTERVAL 3 DAY); ``` 这将在每天凌晨2点执行,删除date_column字段早于3天前...
创建活动应用创建事件应用程序是... create-react-app --helpUsage: create-event-app < command>Options: -V, --version output the version number -h, --help output usage informationCommands: add | a Add a new
语言:English (United States) 根据所选文本在您的Google日历中创建一个事件。 选择或突出显示包含日期,时间和事件标题的文本。 (时间和标题是可选的。)右键单击所选文本,然后单击“为'....'创建Google日历事件...
本文将深入探讨如何在CentOS 7上安装Zabbix 5.0,并详细介绍如何导入MySQL所需的SQL文件`create.sql`来初始化数据库。 首先,让我们了解Zabbix。Zabbix是一款功能强大的网络监控系统,能够实时监控服务器、网络设备...
MySQL_create.sql
### 结合实验代码device_create()详解 #### 一、引言 在Linux内核开发过程中,设备节点的创建是一项非常重要的工作。通过`device_create()`函数可以实现在系统中创建设备节点,使得用户空间的应用程序能够与内核...
CREATE TABLE [dbo].[EventLog] ( [Counter] [int] IDENTITY(1,1) NOT NULL, [EventType] [int] NULL, [EventCode] [int] NULL, [SourceType] [int] NULL, [SourceID] [int] NULL, [SourceIndex] [int] NULL, ...
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] DO event_body; 其中,event_name 是事件的名称,schedule 是事件的计划,event_body 是事件执行的操作。 示例 ...
马肯打码机软件CoLOS Create Pro 5.2是一款专为标识和编码行业设计的专业软件,它提供了强大的标签设计和打印功能。该版本包含了中文包,使得中国用户在使用过程中能够更加方便地理解和操作软件的各项功能。CoLOS ...
20110930_createpdf20110930_createpdf20110930_createpdf20110930_createpdf20110930_createpdf20110930_createpdf20110930_createpdf20110930_createpdf
CREATE EVENT IF NOT EXISTS student_bak_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY -- 每天执行一次 ON COMPLETION PRESERVE -- 执行完毕后保留事件 ENABLE -- 开启事件 COMMENT '每天凌晨自动备份...
`db.createUser` 方法就是用于创建具有特定权限的用户的。以下是对 `db.createUser` 使用的详细介绍: ### 1. `db.createUser` 方法的官方文档参考 `db.createUser` 方法允许管理员创建新的用户账户,其基本语法...
Oracle Create Type 详解 Oracle Create Type 是 Oracle 数据库中的一种强大工具,可以用于创建自定义类型,例如对象类型、数组类型、表类型等。在本文中,我们将详细介绍 Oracle Create Type 的概念、语法和应用。...
### create_generated_clock 应用详解 #### 一、概述 `create_generated_clock` 命令是静态时序分析(STA)中一个重要的概念,它主要用于定义时钟信号之间的相位(边沿)关系,特别是在复杂的时钟网络中。通过这个...
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; ``` 其中,`schedule`定义了事件的执行时间,可以是...