我的触发器中出现语法错误。

我试图在每次插入后检查表是否大于5000行,如果是,则删除1000块中10分钟以上的所有行,直到表达到1000行以下时停止。

这是代码

CREATE trigger my_trigger after insert ON myTable
    IF (SELECT count(Uuid) from myTable) > 5000
    THEN
        WHILE (SELECT count(Uuid) from myTable) > 1000
            DELETE from myTable
                where myTable.created < (NOW() - INTERVAL 10 MINUTE)
        END WHILE
    END IF;


如何删除所有早于时间戳的行?

最佳答案

语法错误来自无效的WHILE子句。正确的形式可能是:

SELECT COUNT(Uuid) INTO @cnt FROM myTable;
WHILE (@cnt > 1000)
...


但是,如果有少于1000分钟的1000条记录(这肯定会最终使所有记录都早于10分钟:),这可能会导致(几乎)无限循环。

但是这里的主要问题是(reference):


  (...)触发器无法修改调用(...)触发器的语句已在使用(用于读取或写入)的表。


但是,您可以使用EVENT达到类似的效果(这会不时清除表)。

关于mysql - MySQL触发器删除所有早于时间戳的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21162110/

10-16 23:18