mysql 创建事件_MySQL创建事件(CREATE EVENT)

在 MySQL 中,可以通过 CREATE EVENT 语句来创建事件,其语法格式如下:

CREATE EVENT [IF NOT EXISTS] event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT 'comment']

DO event_body;

从上面的语法可以看出,CRATE EVENT 语句由多个子句组成,各子句的详细说明如下表所示。

子句

说明

DEFINER

可选

用于定义事件执行时检查权限的用户

IF NOT EXISTS

可选

用于判断要创建的事件是否存在

EVENT event_name

必选

用于指定事件名称,event_name 的最大长度为 64 个字符

如果未指定 event_name,则默认为当前的 MySQL 用户名(不区分大小写)

ON SCHEDULE schedule

必选

用于定义执行的时间和时间间隔

schedule 表示触发点

ON COMPLETION [NOT] PRESERVE

可选

用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE

ENABLE | DISABLE | DISABLE ON SLAVE

可选,用于指定事件的一种属性。

其中,关键字 ENABLE 表示该事件是活动的,即调度器检查事件是否必须调用;

关键字 DISABLE 表示该事件是关闭的,即事件的声明存储到目录中,但是调度器不会检查它是否应该调用;

关键字 DISABLE ON SLAVE 表示事件在从机中是关闭的。

如果不指定以上 3 个选项中的任何一个,默认为 ENABLE

COMMENT 'comment'

可选,用于定义事件的注释

DO event_body

必选

用于指定事件启动时所要执行的代码,可以是任何有效的 SQL 语句、存储过程或者一个计划执行的事件。

如果包含多条语句,则可以使用 BEGIN..END 复合结构

在 ON SCHEDULE 子句中,参数 schedule 的值为一个 AT 子句,用于指定事件在某个时刻发生,其语法格式如下:

AT timestamp [+ INTERVAL interval]...

| EVERY interval

[STARTS timestamp [+ INTERVAL interval] ...]

[ENDS timestamp[+ INTERVAL interval]...]

参数说明如下:

timestamp:一般用于只执行一次,表示一个具体的时间点,后面加上一个时间间隔,表示在这个时间间隔后事件发生。

EVERY 子句:用于事件在指定时间区间内每隔多长时间发生一次,其中 STARTS 子句用于指定开始时间;ENDS 子句用于指定结束时间。

interval:一般用于周期性执行,表示一个从现在开始的时间,其值由一个数值和单位构成。例如,使用“4 WEEK”表示 4 周,使用“'1:10'HOUR_MINUTE”表示 1 小时 10 分钟。间隔的长短用 DATE_ADD() 函数支配。

interval 参数可以是以下值:

YEAR | QUARTER | MONTH |DAY | HOUR | MINUTE |

WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |

DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND

一般情况下,不建议使用不标准(以上未加粗关键字)的时间单位。

例 1

在 test 数据库中创建一个名称为 e_test 的事件,用于每隔 5 秒向表 tb_eventtest 中插入一条数据。

创建 tb_eventtest 表,SQL 语句和运行结果如下:

mysql> CREATE TABLE tb_eventtest(

-> id INT(11) PRIMARY KEY AUTO_INCREMENT,

-> user VARCHAR(20),

-> createtime DATETIME);

Query OK, 0 rows affected (0.07 sec)

创建 e_test 事件,SQL 语句和运行结果如下:

mysql> CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 5 SECOND

-> ON COMPLETION PRESERVE

-> DO INSERT INTO tb_eventtest(user,createtime)VALUES('MySQL',NOW());

Query OK, 0 rows affected (0.04 sec)

创建事件后,查询 tb_eventtest 中的数据,SQL 语句和运行结果如下:

mysql> SELECT * FROM tb_eventtest;

+----+-------+---------------------+

| id | user | createtime |

+----+-------+---------------------+

| 1 | MySQL | 2020-05-21 10:41:39 |

| 2 | MySQL | 2020-05-21 10:41:44 |

| 3 | MySQL | 2020-05-21 10:41:49 |

| 4 | MySQL | 2020-05-21 10:41:54 |

+----+-------+---------------------+

4 rows in set (0.01 sec)

从结果可以看出,系统每隔 5 秒插入一条数据,这说明事件创建执行成功了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值