最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

对MySQLevent的相关理解

来源:动视网 责编:小采 时间:2020-11-09 07:51:05
文档

对MySQLevent的相关理解

对MySQLevent的相关理解:MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_sche
推荐度:
导读对MySQLevent的相关理解:MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_sche


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


名称最大长度可以是个字节。名字必须是当前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列,最大长度为个字节。'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表:

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 ;

文档

对MySQLevent的相关理解

对MySQLevent的相关理解:MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 MySQL5.1.xx版本中引入了一项新特性EVENT,实现类似Oracle的JOB功能 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_sche
推荐度:
标签: 理解 event mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top