Mysql触发器删除所有早于时间戳的行

时间:2014-01-16 12:42:33

标签: mysql sql syntax triggers

我的Trigger中有一些语法错误。

如果表格大于5000行,我试图在每次插入后进行检查,如果是这样的话,当表格达到1000行以下时,在1000个块中删除超过10分钟的所有行。

这是代码

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;

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

1 个答案:

答案 0 :(得分:0)

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

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

但是,这可能导致(几乎)无限循环,如果超过1000分钟的记录超过10分钟(当然,最终所有记录都将超过10分钟:)。

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

  

A(...)触发器不能通过调用(...)触发器的语句修改已经在使用(用于读取或写入)的表。

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