phpmyadmin如何创建事件实现users表对应字段条件更新
功能实现说明
你提的需求完全可以实现,不需要手动写foreach循环遍历逻辑,直接通过UPDATE语句加WHERE条件即可批量匹配符合要求的记录执行更新,效率远高于逐行循环。如果需要更高的实时性,也可以选择触发器方案替代定时事件。
前置准备:开启事件调度器
MySQL事件默认处于关闭状态,需要先开启调度器才能正常运行事件:
- 检查当前调度器状态:
SHOW VARIABLES LIKE 'event_scheduler';
如果返回值为OFF则需要手动开启 - 临时开启调度器(重启MySQL后失效):
SET GLOBAL event_scheduler = ON;
注意:如需永久开启,请在MySQL配置文件(my.cnf/my.ini)的[mysqld]段落中添加event_scheduler = ON,保存后重启MySQL服务即可。
事件代码示例
以下是每5分钟执行一次同步的事件代码,你可以根据需求调整执行频率:
CREATE EVENT `update_islogged_by_serverlog` ON SCHEDULE EVERY 5 MINUTE STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE ENABLE DO UPDATE `users` SET `islogged` = FALSE WHERE `serverlog` = FALSE;
参数说明:
EVERY 5 MINUTE:事件执行周期,可自定义为EVERY 1 MINUTE、EVERY 1 HOUR等不同间隔ON COMPLETION PRESERVE:事件执行后保留配置,如果是单次执行的事件可以改为ON COMPLETION NOT PRESERVEENABLE:事件创建后直接启用
如果你需要serverlog字段被修改后立刻同步islogged字段,不需要定时轮询,更推荐使用触发器,实时性和性能更高,触发器代码如下:
DELIMITER // CREATE TRIGGER `sync_islogged_after_serverlog_update` BEFORE UPDATE ON `users` FOR EACH ROW BEGIN IF NEW.serverlog = FALSE THEN SET NEW.islogged = FALSE; END IF; END // DELIMITER ;
phpMyAdmin创建事件操作步骤
- 登录phpMyAdmin,进入你需要操作的目标数据库
- 点击顶部导航栏的「事件」选项卡(如果没看到该选项,先确认登录账号拥有EVENT权限,且事件调度器已经开启)
- 点击页面中的「新建事件」按钮
- 按提示填写配置:
- 事件名称:自定义填写,比如
update_islogged_by_serverlog - 状态:选择
ENABLE - 计划配置:频率选择
EVERY,后面的间隔值和单位根据你的需求填写,比如间隔填5、单位选MINUTE,开始时间填CURRENT_TIMESTAMP,结束时间留空即可 - 定义:输入同步的SQL语句
UPDATEusersSETislogged= FALSE WHEREserverlog= FALSE;
- 事件名称:自定义填写,比如
- 点击「执行」即可完成事件创建
功能验证
- 事件创建完成后,可执行
SHOW EVENTS FROM 你的数据库名称;查看事件是否正常存在,且状态为ENABLED - 手动修改
users表中某条记录的serverlog字段为FALSE,等待一个事件执行周期后查看对应记录的islogged字段是否自动同步为FALSE即可验证功能是否正常
内容的提问来源于stack exchange,提问作者Mr_Tropica
相关产品推荐
相关产品推荐

