MySQL事件调度器

mysql事件调度器

事件调度器(event_scheduler):可以定时执行某些特定任务,可以看做基于时间的触发器.

事件开关设置

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SET GLOBAL event_scheduler=1;
SHOW CREATE EVENT insert_tdemo;
SHOW EVENTS;

事件的创建

CREATE EVENT [IF NOT EXISTS] event_name
 ON SCHEDULE schedule
 [ON COMPLETION [NOT] PRESERVE] -- 事件执行完成后是否被删除
 [ENABLE | DISABLE]
 [COMMENT 'comment']
 DO sql_statement;
 
schedule:
 AT TIMESTAMP [+ INTERVAL INTERVAL]
 | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
 
INTERVAL:
 quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
 WEEK | SECOND | YEAR_MONTH 
 

例子

CREATE TABLE tdemo(
	timeline TIMESTAMP
);

-- 定期间隔执行某件事情 每隔一秒插入一条数据
DROP EVENT IF EXISTS e_insert_tdemo;
CREATE EVENT IF NOT EXISTS e_insert_tdemo
ON SCHEDULE EVERY 1 SECOND
DO
INSERT tdemo VALUES (CURRENT_TIMESTAMP);

-- 一分钟后清空数据表tdemo中的所有数据
DROP EVENT IF EXISTS e_truncate_tdemo;
CREATE EVENT IF NOT EXISTS e_truncate_tdemo
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
TRUNCATE TABLE tdemo;

-- 定时执行在2018-02-01 16:40:00 执行
CREATE EVENT e_drop_tdemo
ON SCHEDULE AT TIMESTAMP '2018-02-01 16:40:00'
DO
DROP TABLE tdemo;


-- 定时定期任务 xx时间后,每隔一段时间执行一次 (5秒之后,每3秒定时清空tdemo表)
CREATE EVENT e_clear_after_interval
ON SCHEDULE EVERY 3 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 5 SECOND
DO
TRUNCATE TABLE tdemo;


-- 间隔执行定时终止 每隔一秒钟执行一次,10秒后终止执行
DROP EVENT IF EXISTS e_clear_interval_end;
CREATE EVENT e_clear_interval_end
ON SCHEDULE EVERY 1 SECOND
ENDS CURRENT_TIMESTAMP + INTERVAL 10 SECOND
DO
TRUNCATE TABLE tdemo;

-- 定时开启间隔执行定时结束 --5秒开启,每秒执行,10秒钟停止执行
CREATE EVENT e_clear_interval_end
ON SCHEDULE EVERY 1 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 5 SECOND
ENDS CURRENT_TIMESTAMP + INTERVAL 15 SECOND
DO
INSERT tdemo VALUES (CURRENT_TIMESTAMP);

-- 每天定时1点执行
CREATE EVENT e_clear_interval_end
ON SCHEDULE EVERY 1 DAY 
STARTS '2010-12-18 01:00:00'
DO
INSERT tdemo VALUES (CURRENT_TIMESTAMP);

修改

ALTER EVENT event_name
 [ON SCHEDULE schedule]
 [RENAME TO new_event_name]
 [ON COMPLETION [NOT] PRESERVE]
 [COMMENT 'comment']
 [ENABLE | DISABLE] [DO sql_statement]
 
ALTER EVENT e_test DISABLE;
### MySQL 事件调度器(Event Scheduler)的使用与配置 MySQL事件调度器(Event Scheduler)允许用户在数据库中创建定时任务,类似于操作系统的 cron 作业。以下是关于如何启用、配置和使用 MySQL 事件调度器的详细说明。 #### 1. 检查 MySQL 版本 确保所使用的 MySQL 版本不低于 5.1.6,因为事件调度器功能自该版本起才被引入[^2]。可以通过以下 SQL 命令检查 MySQL 的版本: ```sql SELECT VERSION(); ``` #### 2. 启用事件调度器 默认情况下,事件调度器可能未启用。可以通过修改 `event_scheduler` 系统变量来启用它。有以下几种方式: - **临时启用**:通过会话或全局设置启用事件调度器。此更改仅对当前会话或服务器重启前有效。 ```sql SET GLOBAL event_scheduler = ON; ``` - **永久启用**:编辑 MySQL 配置文件(如 `my.cnf` 或 `my.ini`),添加或修改以下内容以确保每次启动时自动启用事件调度器: ```ini [mysqld] event_scheduler=ON ``` 确认事件调度器的状态是否已启用: ```sql SHOW VARIABLES LIKE 'event_scheduler'; ``` 如果返回值为 `ON`,则表示事件调度器已启用[^2]。 #### 3. 创建事件 创建事件的语法如下: ```sql CREATE EVENT event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] DO sql_statement; ``` - **`event_name`**:事件的名称。 - **`schedule`**:定义事件的执行时间,可以是单次执行或周期性执行。 - 单次执行:`AT TIMESTAMP` - 周期性执行:`EVERY interval` - **`ON COMPLETION`**:指定事件完成后是否保留。 - **`ENABLE/DISABLE`**:控制事件是否立即生效。 - **`sql_statement`**:事件触发时要执行的 SQL 语句。 ##### 示例 1:创建一个单次执行的事件 以下示例将在 1 小时后删除表 `old_data` 中的所有数据: ```sql CREATE EVENT delete_old_data ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO DELETE FROM old_data; ``` ##### 示例 2:创建一个周期性执行的事件 以下示例将每 1 天清理一次 `logs` 表中超过 30 天的数据: ```sql CREATE EVENT cleanup_logs ON SCHEDULE EVERY 1 DAY DO DELETE FROM logs WHERE created_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY); ``` #### 4. 查看现有事件 可以通过查询 `information_schema.EVENTS` 表来查看当前数据库中的所有事件: ```sql SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = 'your_database_name'; ``` #### 5. 修改或删除事件 - **修改事件**:使用 `ALTER EVENT` 语句修改现有事件的属性或执行逻辑。 ```sql ALTER EVENT cleanup_logs ON SCHEDULE EVERY 2 DAYS; ``` - **删除事件**:使用 `DROP EVENT` 语句删除不再需要的事件。 ```sql DROP EVENT cleanup_logs; ``` #### 6. 注意事项 - 确保事件调度器已启用,否则事件不会被执行。 - 事件的执行依赖于 MySQL 服务的正常运行。如果 MySQL 服务中断,事件可能会错过预定的执行时间。 - 如果需要更高的实时性,MySQL事件调度器可以实现秒级任务,这比操作系统的任务调度器更灵活[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值