使用触发器自动删除mysql数据库中日志表中的行

使用触发器自动删除mysql数据库中日志表中的行,sql,mysql,logging,triggers,Sql,Mysql,Logging,Triggers,有人能为我提供一个mysql 5触发器创建代码,当我的表中的行总数达到y时,该代码允许我删除表中的前x行数吗 谢谢您不能在触发触发器的同一张表上执行任何CRUD。。。因此,这不能使用表上的触发器来完成 但是,您可以使用两个查询的序列。因为它是一个日志表,所以如果第二个日志表失败,则可能会有问题,也可能不会有问题。每隔一段时间,计算总行数,并再次将其修剪到合适的大小 INSERT INTO LOGTABLE ..... # 1 record DELETE FROM LOGTABLE ORDER

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


谢谢

您不能在触发触发器的同一张表上执行任何CRUD。。。因此,这不能使用表上的触发器来完成

但是,您可以使用两个查询的序列。因为它是一个日志表,所以如果第二个日志表失败,则可能会有问题,也可能不会有问题。每隔一段时间,计算总行数,并再次将其修剪到合适的大小

INSERT INTO LOGTABLE .....   # 1 record
DELETE FROM LOGTABLE ORDER BY ID LIMIT 1;
编辑:以获得更好的解决方案

一个更明智的选择是安排一个作业(windows任务调度器+mysql.exe
linux+cron)来运行这个批处理,它只保留100条(根据需要更改)记录


没有办法安排吗?从资源角度看,在每次插入时执行删除对我来说似乎有点昂贵。也许我把触发器的概念搞错了?是的,触发器不起作用。但我已经用一种更好的方法编辑了答案,这是完美的——非常感谢你们。我已经考虑过这一点,为了随着越来越多的用户使用该网站并记录更多的日志而自动扩展,我认为删除超过1个月的日志会更好。
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;