navica mysql创建事件_创建 MySQL 事件(第 2 部分)

本文介绍了如何使用CREATE EVENT语法在MySQL中创建事件,包括一次性事件的创建和设置,以及如何通过ON COMPLETION PRESERVE子句保留事件。
摘要由CSDN通过智能技术生成

2018 年 7 月 3 日,由 Robert Gravelle 撰写

欢迎回到我们的数据库事件系列!第 1 部分 概述了数据库事件和计划任务之间的区别,以及如何在 MySQL 中配置事件调度程序线程。在本文中,我们将探讨如何使用 CREATE EVENT 语法创建 MySQL 事件。

创建新的 MySQL 事件

创建事件类似于创建其他数据库对象,例如存储过程或函数。与这些对象一样,事件是包含 SQL 语句的命名数据库对象。这是基本语法:

CREATE EVENT [IF NOT EXIST] event_name

ON SCHEDULE schedule

DO

event_body

有几点需要注意:

事件名在数据库模式中必须是唯一的。

如果事件主体中有多个 SQL 语句,则可以将它们包装在 BEGIN END 块中。

让我们创建一个实际的事件来使用上面的语法。我们将定义和安排一次性事件,将消息插入名为 messages 的表中。

首先,找到合适的测试数据库或创建一个新的测试数据库。然后使用 CREATE TABLE 语句创建一个名为“messages”的新表,如下所示:CREATE TABLE IF NOT EXISTS messages (

id INT PRIMARY KEY AUTO_INCREMENT,

message VARCHAR(255) NOT NULL,

created_at DATETIME NOT NULL

);

现在是时候使用 CREATE EVENT 语句创建我们的事件了:

CREATE EVENT IF NOT EXISTS test_event

ON SCHEDULE AT CURRENT_TIMESTAMP

DO

INSERT INTO messages(message,created_at)

VALUES('Test MySQL Event 1',NOW());

那个事件应该立即将我们的消息添加到 message 表中。我们发出 SELECT ALL 来检查 message 表:

40d9808fb03c61e3a879543fb2333ee5.png

在完成后保留事件

事件过期时会自动删除。像我们创建的一次性事件,它会在完成运行时过期。

我们可以在 MySQL 命令提示符发出以下语句来查看数据库模式的所有事件:

mysql> SHOW EVENTS FROM test;

Empty set

若要使事件在过期后仍然保留,我们可以使用 ON COMPLETION PRESERVE 子句。这是创建另一个一次性事件的语句,该事件在创建后 30 秒运行,并且在运行后不会被删除:

CREATE EVENT test_event_2

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 30 SECOND

ON COMPLETION PRESERVE

DO

INSERT INTO messages(message,created_at)

VALUES('Test MySQL Event 2',NOW());

等待至少 30 秒并检查 messages 表。这应添加了另一条记录:

85087117ae300e6c5a9abbbc51d12879.png

让我们再次运行 SHOW EVENTS 语句。因为 ON COMPLETION PRESERVE 子句的效果,你可以看到事件在那里(虽然处于 DISABLED 状态):

mysql> SHOW EVENTS FROM test;

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

| Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation |

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

| test | test_event_2 | root@localhost | SYSTEM | ONE TIME | 2018-06-07 15:08:00 | NULL | NULL | NULL | NULL | DISABLED | 1 | utf8mb4 | utf8mb4_general_ci | utf8_general_ci |

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

1 row in set (0.02 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值