0

0

对MySQL event的相关理解

php中文网

php中文网

发布时间:2016-06-07 15:21:23

|

1192人浏览过

|

来源于php中文网

原创

MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能

mysql5.1.xx版本中引入了一项新特性event,实现类似oracle的job功能 

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler';
 

+-----------------+-------+
 | event_scheduler | OFF  |
 +-----------------+-------+

开启调度器

SET GLOBAL event_scheduler = 1;
 

或者

SET GLOBAL event_scheduler = ON;
 

注意MySQL配置文件中添加配置实现重启后仍然有效

my.ini or my.cnf 中的
[mysqld]
添加 event_scheduler=ON

 

创建事件(CREATE EVENT)

基本语法

CREATE EVENT [IF NOT EXISTS] event_name
 ON SCHEDULE schedule
 [ON COMPLETION [NOT] PRESERVE]
 [ENABLE | DISABLE]
 [COMMENT 'comment']
 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}

 

[IF NOT EXISTS]
使用IF NOT EXISTS,只有在同名event不存在时才创建,,否则忽略。建议不使用以保证event创建成功。

 
 

event_name
         
       
名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。
 使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。
ON SCHEDULE
     
ON SCHEDULE 计划任务,有两种设定计划任务的方式:
1. AT 时间戳,用来完成单次的计划任务。
2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

 在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
 在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

 提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。

[ON COMPLETION [NOT] PRESERVE]
 ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

[ENABLE | DISABLE]
参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

可以用如下命令关闭或开启事件:
ALTER EVENT event_name  ENABLE/DISABLE

[COMMENT 'comment']
注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。

DO sql_statement
 DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句。

 使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:
LOCK TABLES
 UNLOCK TABLES
 CREATE EVENT
 ALTER EVENT
 LOAD DATA

1)首先来看一个简单的例子来演示每秒插入一条记录到数据表

USE test;
 CREATE TABLE aaa (timeline TIMESTAMP);
 CREATE EVENT e_test_insert
 ON SCHEDULE EVERY 1 SECOND
 DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询成功。

 

2) 5天后清空test表:

.net全诚外卖叫餐(订餐)系统
.net全诚外卖叫餐(订餐)系统

全诚外卖通是全诚团队继“全诚商城”之后以叫餐(预订)为核心的又一力作,或者称之为“特色店铺系统”,系统是基于.net2.0 + SQL构架、B/s框架的多用户店铺管理系统;外卖通的开发旨在以商家和消费者为服务对象,借以二者相互依存的关系,以互动的形式成就全诚外卖通一个完善的WEB系统平台,在这个平台里,商家可以扩大销售

下载

CREATE EVENT e_test
 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
 DO TRUNCATE TABLE test.aaa;

 3) 2007年7月20日12点整清空test表:

CREATE EVENT e_test
 ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
 DO TRUNCATE TABLE test.aaa;

 4) 每天定时清空test表:

CREATE EVENT e_test
 ON SCHEDULE EVERY 1 DAY
 DO TRUNCATE TABLE test.aaa;

 5) 5天后开启每天定时清空test表:

CREATE EVENT e_test
 ON SCHEDULE EVERY 1 DAY
 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
 DO TRUNCATE TABLE test.aaa;

 6) 每天定时清空test表,5天后停止执行:

CREATE EVENT e_test
 ON SCHEDULE EVERY 1 DAY
 ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
 DO TRUNCATE TABLE test.aaa;

 7) 5天后开启每天定时清空test表,一个月后停止执行:

CREATE EVENT e_test
 ON SCHEDULE EVERY 1 DAY
 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
 ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
 DO TRUNCATE TABLE test.aaa;
 [ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。

8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

DELIMITER $$

CREATE EVENT e_test
 

ON SCHEDULE EVERY 1 DAY
 ON COMPLETION NOT PRESERVE
 DO TRUNCATE TABLE test.aaa;
 

END

$$

DELIMITER ;

9)每天的 10点执行一次update_test的存储过程

 

DELIMITER $$
 
CREATE EVENT event_update_test

ON SCHEDULE EVERY 1 DAY

STARTS '2015-07-31 10:00:00'

ON  COMPLETION  PRESERVE

ENABLE

DO

BEGIN

call update_test();

END

$$

DELIMITER ;

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 769人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号