【发布时间】:2019-11-18 21:00:56
【问题描述】:
我正在尝试创建一个 EVENT 以每天按计划启动以更新表中的数据。我在 MySQL 中使用SET GLOBAL event_scheduler = ON; 命令设置了event_scheduler ON,这就是我在运行以下命令时看到的:
MariaDB [hr]> SHOW PROCESSLIST;
+-----+-----------------+-----------+------+---------+-------+--------------------------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+-----+-----------------+-----------+------+---------+-------+--------------------------+------------------+----------+
| 1 | system user | | NULL | Daemon | NULL | InnoDB purge coordinator | NULL | 0.000 |
| 2 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 3 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 4 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 5 | system user | | NULL | Daemon | NULL | InnoDB shutdown handler | NULL | 0.000 |
| 228 | event_scheduler | localhost | NULL | Daemon | 10486 | Waiting on empty queue | NULL | 0.000 |
| 613 | root | localhost | hr | Query | 0 | Init | SHOW PROCESSLIST | 0.000 |
+-----+-----------------+-----------+------+---------+-------+--------------------------+------------------+----------+
7 rows in set (0.000 sec)
所以 event_scheduler 确实在运行。这就是我创建触发器的方式:
CREATE EVENT update_attendance
ON SCHEDULE
EVERY 1 MINUTE
DO
UPDATE attendance SET markedAttendance = 1;
当我运行它时,它显示Query OK, 0 rows affected (0.000 sec),但是当我运行SHOW EVENTS 时它返回一个空集。此外,如果我 DROP update_attendance 它会丢弃该事件。触发器永远不会执行一次。我在 Windows 10 上运行 XAMPP 的 MySQL。我不明白发生了什么。我在这里做错了什么?
【问题讨论】:
-
我感觉您可能还需要/想添加
ON COMPLETION PRESERVE.. -
@RaymondNijland 我添加了它,但没有任何区别。和以前一样。如果事件从未触发,它甚至会有所作为吗?
-
“如果它从来没有运行过一次会有什么不同吗?” 不,你的问题并不完全清楚,事件从未执行过一次......在
CREATE EVENT之后直接运行SHOW WARNINGS;也许你会得到提示为什么它不工作.. -
创建触发器后没有任何警告。
-
我能想到它可能失败的唯一原因是 UPDATE 查询是“错误的”,这意味着错误的表名或列名。MySQL 在 CREATE EVENT 期间不检查 UPDATE 的验证 - > db-fiddle.com/f/hNzXscoFWmibr69BV31fPc/0 注意我可以创建缺少“对象”的事件(在这种情况下是缺少表)
标签: mysql events xampp mariadb