我的触发器中出现语法错误。
我试图在每次插入后检查表是否大于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/