Mysql创建事件执行任务

本文介绍了如何在MySQL中查看和管理事件调度器,包括开启和关闭事件调度器,以及查看事件列表。同时,展示了创建表的SQL语句,创建了一张名为`aaa`的表,包含`id`, `name`, `score`, `num`和`create_time`字段。此外,还详细解释了两种创建事件的方法,一种直接创建事件,另一种通过创建存储过程并由事件调用,以每10秒执行一次的频率插入数据。

1.查看事件是否开启

show VARIABLES like 'event%';   -- 若为OFF,则执行下列指令
 
-- 开启
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
 
-- 关闭
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;
 
-- 查看所有事件
SHOW EVENTS;
 
-- 查看具体的事件执行情况
SELECT * FROM information_schema.events WHERE EVENT_SCHEMA='test' ;   -- 查询事件详情

 2.创建一张表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for aaa
-- ----------------------------
DROP TABLE IF EXISTS `aaa`;
CREATE TABLE `aaa` (
  `id` varchar(64) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

3.创建事件

这是每个10秒钟 执行一次,用户也可以手动修改执行的频率,操作步骤如下:

方式一:直接创建时间

-- 如果存在存储过程e_test,则删除
DROP PROCEDURE IF EXISTS e_test;
 
-- 创建事件   
CREATE EVENT IF NOT EXISTS e_test
ON SCHEDULE EVERY '10' SECOND STARTS '2022-12-30 10:01:00'
ON COMPLETION  PRESERVE COMMENT '每隔1秒钟添加一条数据'
DO

--  执行我们的业务sql
insert into czxt.aaa (id,name,score,num,create_time)
values (round(RAND() * 10000000000000000,0),111,2,3,now());

 

 

 

方式二:先创建存储过程,再创建事件调取存储过程

 

 

<think>嗯,用户现在要创建一个每30秒执行一次的事件,这个问题很实用。用户之前提到了ALTEREVENT的用法和复合语句的示例,这说明他对MySQL事件的基本语法已经有所了解。现在他的需求很明确:创建一个每30秒执行事件。这种高频事件通常用于实时监控或数据采集场景。需要重点考虑的是时间间隔设置的正确性。MySQL支持SECOND单位,这很关键,因为部分数据库可能只支持分钟级别的间隔。用户可能不知道这个细节,需要在回复中明确说明。另一个要点是事件调度器的状态。很多用户创建事件后忘记启用全局事件调度器,导致事件无法执行。这点必须强调,并给出检查命令和设置方法。考虑到30秒一次的执行频率,用户可能需要执行轻量级操作。在示例中建议包含简单的SQL语句,比如数据插入操作。同时提醒用户避免在事件中放置复杂逻辑,以免造成性能问题。时间戳格式的选择也很重要。用户可能需要精确到秒的时间记录,所以示例中使用了CURRENT_TIMESTAMP而不是NOW(),因为前者包含毫秒精度。最后要记得补充重要实践建议:高频事件的监控方法、权限要求以及日志记录策略。这些往往是实际运维中最容易忽略的部分。</think> 在 MySQL创建每 30 秒执行一次的事件,需要使用 `CREATE EVENT` 语句并配合 `EVERY` 子句指定间隔[^1][^2]。**关键是在 `ON SCHEDULE` 子句中明确设置时间单位和间隔值**: ```sql DELIMITER $$ CREATE EVENT your_event_name -- 替换为你的事件名称 ON SCHEDULE EVERY 30 SECOND -- 核心:设置每30秒执行 STARTS CURRENT_TIMESTAMP -- 可选:设置开始时间(立即开始) ON COMPLETION PRESERVE -- 可选:执行后保留事件定义 DO BEGIN -- 在此处写入需要每30秒执行的SQL语句 -- 例如:INSERT INTO log_table (message) VALUES ('周期性任务执行中'); -- 或调用存储过程:CALL your_procedure(); END $$ DELIMITER ; ``` **关键说明:** 1. `EVERY 30 SECOND` 这是实现**每30秒**的核心语法,`SECOND` 是 MySQL 支持的最小时间单位[^1]。 2. `STARTS CURRENT_TIMESTAMP` 表示事件**立即开始生效**(可省略或指定具体开始时间)。 3. `ON COMPLETION PRESERVE` 确保事件执行结束后**不会被自动删除**(默认行为是 `NOT PRESERVE`,即执行一次后删除)。 4. **复合语句** 使用 `BEGIN ... END` 包裹多个 SQL 语句时需临时修改 `DELIMITER`[^2]。 **启用事件前检查:** ```sql SHOW VARIABLES LIKE 'event_scheduler'; -- 检查事件调度器状态 SET GLOBAL event_scheduler = ON; -- 若为OFF,需手动启用 ``` **验证事件创建:** ```sql SHOW EVENTS; -- 查看所有事件 SELECT * FROM mysql.event; -- 查询事件详细信息(需权限) ``` **注意事项:** ⚠️ **高频事件优化**:30秒间隔属于高频任务,**确保SQL语句高效**,避免复杂事务阻塞 ⚠️ **资源消耗**:持续运行可能增加服务器负载,**建议配合监控机制** ⚠️ **权限**:执行 `CREATE EVENT` 需具备 `EVENT` 权限 --- **相关问题** 1. 如何临时禁用或启用已创建MySQL 事件? 2. MySQL 事件执行失败时如何查看错误日志? 3. 如何修改现有事件执行间隔(例如从 30 秒改为 1 分钟)? 4. 除了 `SECOND`,MySQL 事件还支持哪些时间单位? [^1]: MySQL 官方文档规定使用 `EVERY interval` 子句控制事件周期,支持 `SECOND/MINUTE/HOUR` 等时间单位。 [^2]: 使用 `BEGIN ... END` 复合语句时需通过 `DELIMITER` 临时修改终止符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值