我的触发器中有一些语法错误。
我正在尝试在每次插入后检查表是否大于 5000 行,如果是,请在 10 个块中删除所有超过 1000 分钟的行,当表达到 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 条记录小于 10 分钟(当然,最终所有记录都将早于 10 分钟:),这可能会导致(几乎)无限循环。
但这里的主要问题是(参考):
(...) 触发器无法修改调用 (...) 触发器的语句已使用(用于读取或写入)的表。
但是,您可以使用EVENT
实现类似的效果(这会时不时地清除您的桌子)。