1

我有大约 5 个 mySql 事件,每个事件完成后 15 分钟自动运行。

从 00:00 开始,他们都使用 sum() of votes 更新表格。

有什么方法可以判断事件是否失败?如果失败,则其他事件无需运行。失败是指内部(sql 变得疯狂)或者它根本没有执行。

我想到的一种方法是让事件在其成功时称为存储过程或函数,而后者又会调用其他事件。这样的事情可能吗?

4

2 回答 2

2

创建一个表,您可以在其中存储有关事件的信息。然后,在代码末尾的每个事件中添加一个 INSERT 语句。该表需要存储您签入事件所需的信息。

于 2013-05-20T06:11:07.530 回答
1

您可以尝试使用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;
于 2013-05-20T06:25:09.513 回答