什么是“MySQL事件”?它的目的是什么?它与“作业调度器”有何不同?
许多在SO上的帖子和MySQL文档都描述了如何实现MySQL事件,但我只对它们的目的感兴趣。
许多在SO上的帖子和MySQL文档都描述了如何实现MySQL事件,但我只对它们的目的感兴趣。
MySQL事件提供了一种替代“定时任务”和“cron作业”的方法。
事件可用于创建备份、删除过期记录、聚合数据以进行报告等。与标准触发器不同,后者在给定条件下执行,事件是一个由时间流逝触发的对象,有时被称为时间触发器。
请参考下面的链接,其中解释了所有内容:
test
表:CREATE TABLE test (
num int
);
num
为1
的行:INSERT INTO test (num) VALUES (1);
plus_one
的事件,从2023-11-15 00:00:00
开始,每秒将1
加到num
中,如下所示。*CREATE EVENT语句必须有DO语句,并且DO
语句必须至少有一条SQL语句,否则会出现错误。如果2023-11-15 00:00:00
已经过去,那么在创建plus_one
事件后立即开始每秒将1
加到num
中,基本上,您需要在创建事件时将默认分隔符;
更改为类似$$
的内容,否则会出现错误,然后在创建事件后,您需要将分隔符$$
更改回;
,如下所示,我的答案解释了分隔符,创建事件时必须选择一个数据库,否则会出现错误。DELIMITER $$
CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO
BEGIN
UPDATE test SET num = num + 1;
END$$
DELIMITER ;
plus_one
事件每秒将1
添加到num
,如下所示:mysql> SELECT num FROM test;
+------+
| num |
+------+
| 23 |
+------+
...
mysql> SELECT num FROM test;
+------+
| num |
+------+
| 61 |
+------+
@my_value
为1
,然后在事件中使用它,如下所示:SET @my_value = 1;
DELIMITER $$
CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO
BEGIN
UPDATE test SET num = @my_value; -- Here
END$$
DELIMITER ;
@my_value
为 NULL
。mysql> SELECT @my_value;
+----------------------+
| @my_value |
+----------------------+
| NULL |
+----------------------+
@my_value
,并将其设置为Hello
,也是如此。DELIMITER $$
CREATE EVENT my_event
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO
BEGIN
SET @my_value = "Hello"; -- Here
END$$
DELIMITER ;
@my_value
为 NULL
。mysql> SELECT @my_value;
+----------------------+
| @my_value |
+----------------------+
| NULL |
+----------------------+
plus_one
的事件,而无需更改分隔符为$$
,也不会出现错误。CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO
UPDATE test SET num = num + 1;