mysql总结-event事件

简介

event即时间触发器,用于在特定时间或时间间隔,触发相关的SQL语句或存储过程。

使用

开启/关闭

查看开启状态:SHOW VARIABLES LIKE 'event_scheduler';

MySQL 5.7 中默认值是 off,MySQL 8.0 中默认值是 on

设置方式:

命令配置(mysql重启后恢复成默认值):以下任意一条都可以开启

SET GLOBAL event_scheduler = ON;
SET @@GLOBAL.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@GLOBAL.event_scheduler = 1;

以下任意一条都可以关闭(当你设定事件计划为0或OFF,即关闭事件计划进程的时候,不会有新的事件执行,但现有的正在运行的事件会执行到完毕。)

SET GLOBAL event_scheduler = OFF;
SET @@GLOBAL.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@GLOBAL.event_scheduler = 0;

配置文件配置(永久有效):

MySQL 配置文件 my.cnf,找到 [mysqld] 配置项,添加一行:event_scheduler=ON

查看定义的事件

查看特定数据库的事件

use xgss;
SHOW EVENTS;

show events语法

SHOW EVENTS
    [{FROM | IN} schema_name]
    [LIKE 'pattern' | WHERE expr]

查看所有定义的事件:

select * from information_schema.events;

 查看事件内容

SHOW CREATE EVENT event_name;

事件内容编写

CREATE DEFINER=`root`@`%` EVENT `create_xgss` ON SCHEDULE EVERY 1 DAY STARTS '2022-02-16 08:07:03' ON COMPLETION NOT PRESERVE ENABLE COMMENT '每天执行一次,创建xgss表' DO CALL create_xgss_function

如上是定义了一个事件从2022-02-16 08:07:03开始每天执行一次存储过程create_xgss_function

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO action;

其中,event_name是事件的名称,schedule是事件的调度时间表达式(可以指定事件的触发时间和重复间隔),action是事件要执行的SQL语句或存储过程。

DEFINER用于指定所属用户,默认是当前用户

IF NOT EXISTS 可选,代表如果不存在进行创建,存在就不进行创建

ON COMPLETION [NOT] PRESERVE 可选,代表执行完是否保留,默认不保留(执行完毕后自动drop该事件),如果事件每天都跑,即使设置的是不保留,计划任务执行完毕后也不会自动drop该事件。

ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。默认是ENABLE

COMMENT 'string' 可选,备注信息

shedule表达式的编写

schedule: {
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
}
 
interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

修改事件

修改事件的内容

ALTER
    [DEFINER = user]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    [DO event_body]

修改事件状态:

alter event event_name(事件名称) ENABLE/DISABLE/DISABLE ON SLAVE;

重命名

ALTER EVENT myevent
    RENAME TO yourevent;

移动数据库

ALTER EVENT olddb.myevent
    RENAME TO newdb.myevent;

删除事件

drop event event_name;

 

posted @ 2023-09-01 09:43  星光闪闪  阅读(134)  评论(0)    收藏  举报