有人能为我提供一个MySQL5触发器创建代码,允许我在表中的总行数达到y时删除表中的前x行吗?
谢谢
发布于 2011-01-23 09:15:00
您不能在触发触发器的同一个表上执行任何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;https://stackoverflow.com/questions/4771675
复制相似问题