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

标签 sql mysql logging triggers

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

谢谢

最佳答案

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

但是您可以使用两个查询的序列。由于它是一个日志表,因此第二个是否失败可能无关紧要。偶尔,计算总行数并再次将其调整为合适的大小。

INSERT INTO LOGTABLE .....   # 1 record
DELETE FROM LOGTABLE ORDER BY ID LIMIT 1;

已编辑以获得更好的解决方法

一个更明智的选择是安排一个作业(windows task scheduler + 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;

关于sql - 使用触发器自动从 mysql 数据库中的日志表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771675/

相关文章:

logging - 尝试使用 DynamicProxy 为 StructureMap 制作日志拦截器

java - 使用 Logback-test.xml 将时间戳添加到日志文件

java - 如何为 Vaadin 服务器和客户端配置一般日志记录?

mysql - 删除具有重复字段值的行

php - "UNION"中的理想结果

mysql - Insert into Table 从另一个表和一个独立的值

MySQL 子记录

php - utf8_unicode_ci 似乎不是UTF8

php - InnoDB 与 MyISAM

PHP - 一个查询中的 SQL 过滤器类别