有人可以为我提供一个mysql 5触发器创建代码,当我表中的总行数达到y时,我可以删除表中的前x行吗?
谢谢
答案 0 :(得分:3)
你不能在触发触发器的同一个桌子上执行任何CRUD ...这样就无法使用桌面上的触发器来完成
但是,您可以使用两个查询的序列。由于它是一个日志表,如果第二个失败可能会或可能没有关系。偶尔计算总行数并再次调整大小。
INSERT INTO LOGTABLE ..... # 1 record
DELETE FROM LOGTABLE ORDER BY ID LIMIT 1;
已编辑以获得更好的解决方法
更明智的选择是安排一个将运行此批处理的作业(Windows任务调度程序+ mysql.exe or
linux + cron),该作业仅保留100个(更改为适合)记录
set @sql := (select count(*) from logtable) - 100;
set @sql := concat('delete from logtable order by date limit ', @sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;