mysql 定时事件(event)

本文介绍了如何在MySQL中创建一个每天上午9点执行的事件,更新用户状态,并演示了如何查看现有事件、删除事件、启用事件调度以及检查操作效果。

mysql创建事件,并且定时运行

-- 查看当前数据库中已存在的所有事件
SHOW EVENTS;
SELECT * FROM information_schema.events;

select now()

-- 创建一个每天上午9点运行的定时事件
CREATE EVENT event_update_userstatus
ON SCHEDULE
  EVERY 1 DAY
  STARTS TIMESTAMP(CURRENT_DATE, '9:00:00')
DO
BEGIN
  -- 在这里放入你要执行的SQL语句
  update  mdmemployee set IsDelete=1
	,stdIsDeleted=1
	,modifiedTime=NOW()
	,ModifyDate=NOW()
	where IsDelete=0 and UserId IN
	(
		SELECT UserId from mdmrecordinfo 
		where isdelete=0 and employeeStatus in (6,8)
	);
END;

	
	
-- 删除事件
DROP EVENT IF EXISTS event_update_userstatus;

-- 启用事件计划
SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = ON;

-- 校验
SELECT UserId from mdmrecordinfo where isdelete=0 and employeeStatus in (6,8)
select IsDelete from mdmemployee where UserId='178008096'
-- update mdmemployee set IsDelete=0 where UserId='178008096'

select * from mdmemployee
where IsDelete=0 and UserId IN
(
	SELECT UserId from mdmrecordinfo 
	where isdelete=0 and employeeStatus in (6,8)
);

### 如何在 MySQL 中创建和管理 Event Scheduler #### 启用事件调度器 要使用 MySQL事件调度器 (Event Scheduler),首先需要确保其处于启用状态。可以通过以下方式之一实现: 1. 动态设置 `event_scheduler` 参数为 `ON`: ```sql SET GLOBAL event_scheduler = ON; ``` 2. 修改 MySQL 配置文件 (`my.cnf`) 并重启服务,在 `[mysqld]` 节点下添加如下行[^4]: ```ini [mysqld] event_scheduler=ON ``` 确认事件调度器的状态是否已开启,可查询全局变量: ```sql SHOW VARIABLES LIKE 'event_scheduler'; ``` --- #### 创建定时事件 以下是创建一个简单的定时任务的示例,该任务每分钟删除表中超过一天的数据。 假设有一个名为 `logs` 的表,结构如下: ```sql CREATE TABLE logs ( id INT AUTO_INCREMENT PRIMARY KEY, log_data TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 创建一个事件以定期清理旧数据: ```sql DELIMITER $$ CREATE EVENT IF NOT EXISTS cleanup_logs ON SCHEDULE EVERY 1 MINUTE DO BEGIN DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 DAY; END$$ DELIMITER ; ``` 上述脚本的作用是每隔一分钟执行一次 SQL 删除语句,清除掉 `created_at` 时间早于当前时间减去一天的所有记录[^1]。 --- #### 查看现有事件 可以查看数据库中存在的所有事件及其属性: ```sql SHOW EVENTS; ``` 或者更详细的信息通过查询系统视图获取: ```sql SELECT * FROM information_schema.events; ``` --- #### 修改已有事件 如果需要修改现有的事件定义,则先禁用再更改或直接覆盖原定义即可。例如调整上面例子中的频率到每天一次: ```sql ALTER EVENT cleanup_logs ON SCHEDULE EVERY 1 DAY; ``` 注意:当对正在运行中的事件做改动前最好暂停它以免影响业务逻辑正常运转[^3]。 --- #### 停止/启动某个具体事件 停止指定名称下的某项活动: ```sql ALTER EVENT cleanup_logs DISABLE; -- 关闭此事件 ``` 重新激活被关闭的项目: ```sql ALTER EVENT cleanup_logs ENABLE; -- 开启此事件 ``` 永久移除不再使用的安排事项可以从元存储库里彻底销毁它们: ```sql DROP EVENT cleanup_logs; ``` 以上就是关于如何利用 MySQL 提供的内置机制——事件调度程序来规划并实施自动化运维工作的基本流程说明[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值