MySQL之事件(Event)详解

it2022-05-05  209

目录

1 创建事件

1.1 检查数据库事件是否开启

1.2 开启任务(事件)

1.3 关闭事件

1.4 语法

1.4.1 参数取值

1.4.2 参数定义

1.5 开启事件

1.6 关闭事件

1.7 删除事件

1.8 案例


1 创建事件

1.1 检查数据库事件是否开启

  如果 event_scheduler 等于 ON 表示开启    

SELECT @@event_scheduler;  SHOW VARIABLES LIKE 'event_scheduler';   

1.2 开启任务(事件)

set global event_scheduler=1; -- 或者 SET GLOBAL event_scheduler = ON; -- 或者 在my.cnf中的[mysqld]部分添加 event_scheduler=ON 然后重启mysql。

1.3 关闭事件

SET GLOBAL event_scheduler = OFF;

1.4 语法

 

CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] DO event_body;

1.4.1 参数取值

 schedule和interval参数可取的值:

-- schedule参数可取的值: schedule:         AT timestamp [+ INTERVAL interval] ...          | EVERY interval         [STARTS timestamp [+ INTERVAL interval] ...]         [ENDS timestamp [+ INTERVAL 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}  

1.4.2 参数定义

DEFINER: 定义事件执行的时候检查权限的用户。ON SCHEDULE schedule: 定义执行的时间和时间间隔。ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE:计划任务执行完毕后自动drop该事件,ON COMPLETION  PRESERVE则不会drop掉ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。COMMENT 'comment': 定义事件的注释。

1.5 开启事件

alter event event_name(事件名称) ENABLE; 

1.6 关闭事件

alter event event_name(事件名称) DISABLE; 

1.7 删除事件

DROP EVENT [IF EXISTS] event_name(事件名称);

1.8 案例

CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `t1` datetime DEFAULT NULL, `id2` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8

事件一: 每隔三秒钟插入一条数据

-- 创建一个每隔3秒往test表中插入一条数据的事件 CREATE EVENT IF NOT EXISTS e_test_1 ON SCHEDULE EVERY 3 SECOND ON COMPLETION PRESERVE DO INSERT INTO test(id,t1) VALUES(NULL,NOW());

事件二:清空test表数据 

-- 创建一个10分钟后清空test表数据的事件 CREATE EVENT IF NOT EXISTS e_test_2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO TRUNCATE TABLE test;

事件三:call调用存储过程 

-- 调用存储过程 -- 创建过程 CREATE PROCEDURE pro_test() BEGIN INSERT INTO test(id,t1,id2) VALUES(NULL,NOW(),'1000000'); END -- 调用过程 CREATE EVENT IF NOT EXISTS e_test_3 ON SCHEDULE EVERY 3 SECOND ON COMPLETION PRESERVE DO CALL pro_test();

 


最新回复(0)