我有大约 5 个 mySql 事件,每个事件完成后 15 分钟自动运行。
从 00:00 开始,他们都使用 sum() of votes 更新表格。
有什么方法可以判断事件是否失败?如果失败,则其他事件无需运行。失败是指内部(sql 变得疯狂)或者它根本没有执行。
我想到的一种方法是让事件在其成功时称为存储过程或函数,而后者又会调用其他事件。这样的事情可能吗?
创建一个表,您可以在其中存储有关事件的信息。然后,在代码末尾的每个事件中添加一个 INSERT 语句。该表需要存储您签入事件所需的信息。
您可以尝试使用EXIT HANDLER
:
DROP EVENT IF EXISTS `myDB`.`myEvent`;
CREATE EVENT IF NOT EXISTS `myDB`.`myEvent`
ON SCHEDULE
EVERY 15 MINUTE
COMMENT 'Some comment'
DO
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
-- 1. Flag something, that should be tested in chained events
-- if they should be skipped. I.e.:
-- INSERT INTO `myDB`.`EventTable` (`event`, `failed`, `when`)
-- VALUES ('myEvent', TRUE, NOW());
-- OR
-- UPDATE
-- `myDB`.`EventTable`
-- SET
-- `failed` = TRUE,
-- `when` = NOW()
-- WHERE
-- `event` = 'myEvent';
-- 2. Quit.
END;
-- Do something, that may produce SQLEXCEPTION or SQLWARNING...
END;