在《从实例出发教会你如何创建并执行事件!》中,我们已经掌握了MySQL 事件的创建方法,那么事件创建完成后该如何删除和修改呢?其实,前面我们已经简单提到过使用 DROP EVENT 删除事件。本节将结合实例,详细讲解 MySQL 事件删除与修改的具体步骤:
怎么删?
首先要先有一个事件,我们这里有一张 dotcpp_user 表:

先创建一个名为 insert_user 的事件,让它每 10 秒向 dotcpp_user 表插入一条用户数据('Suser','do coding!'):
CREATE EVENT insert_user
ON SCHEDULE EVERY 10 SECOND
DO
INSERT INTO dotcpp_user (name, hobby)
VALUES ('Suser', 'do coding!');运行一段时间后,可以看到表中的用户数量明显增加:

这时候如果不再需要持续插入数据,就可以停止并删除事件 insert_user;
删除事件的标准语法如下:
DROP EVENT 你的事件名;
现在我们就把这个自动插入数据的事件删除:
DROP EVENT insert_user;
删除 insert_user 事件后,dotcpp_user 表中的用户记录就不会继续自动增加了,这样就完成了 MySQL 删除事件的操作。
怎么改?
我们可以通过 ALTER EVENT 来修改事件:
先准备一个事件,select_user 事件会每 10 秒对 dotcpp_user 表执行一次查询:
USE dotcpp;
CREATE EVENT select_user
ON SCHEDULE EVERY 10 SECOND
DO
SELECT * FROM dotcpp_user;修改事件的语法如下:
ALTER EVENT [IF EXISTS] event_name -- 修改哪个事件 [ON SCHEDULE schedule] -- 定义事件执行时间和频率 [ON COMPLETION [NOT] PRESERVE] -- 事件执行后是否保留 [RENAME TO new_event_name] -- 是否需要重命名 [ENABLE | DISABLE | DISABLE ON SLA VE] -- 是否禁用 [COMMENT 'comment'] -- 为事件添加注释 [DO event_body] -- 执行内容
下面我们简单修改一下这个事件。如果希望把查询频率改为每 20 秒执行一次,可以这样写:
ALTER EVENT select_user ON SCHEDULE EVERY 20 SECOND ON COMPLETION NOT PRESERVE -- 这里重复一次就给关了,懒得drop了 COMMENT '修改完直接给关了' DO SELECT * FROM dotcpp_user;
接着查看修改后的事件定义:
SHOW CREATE EVENT select_user G

这里出现乱码,是因为客户端字符集和服务端字符集不一致导致的。后面我会统一配置 utf8mb4,如果你还不知道如何设置,可以参考《如何对默认字符集和校对规则进行修改?》。
修改后的 select_user 事件可以这样理解:这是一个名为"select_user"的 MySQL 定时事件,由 root 用户在本机创建。它的执行频率被设置为每 20 秒触发一次;同时,由于使用了"NOT PRESERVE"属性,所以事件在完成一次生命周期后会自动删除。它的实际执行内容也很简单,就是查询 dotcpp_user 数据表中的全部记录。
