使用触发器从mysql db中的日志表中自动删除行

时间:2011-01-23 01:04:57

标签: sql mysql logging triggers

有人可以为我提供一个mysql 5触发器创建代码,当我表中的总行数达到y时,我可以删除表中的前x行吗?

谢谢

1 个答案:

答案 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;