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

发布于 2024-10-13 19:14:08 字数 74 浏览 1 评论 0原文

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

谢谢

Can someone provide me with a mysql 5 trigger creation code that would allow me to delete the first x number of rows in a table when the total number of rows in my table reaches y ?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾挽 2024-10-20 19:14:08

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

但是您可以使用两个查询的序列。由于它是一个日志表,因此第二个表是否失败可能会或可能无关紧要。每隔一段时间,计算一下总行数并再次将其修剪到适当的大小。

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

编辑:更好的解决方法

一个更明智的替代方案是安排一个将运行此批处理的作业(Windows任务调度程序+ mysql.exe 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;

You cannot perform any CRUD on the same table that fires the trigger... ergo this cannot be done using a trigger on the table

You can however use a sequence of two queries. Since it is a log table, it may or may not matter if the 2nd one failed. Once in a while, count the total rows and trim it to size again.

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

EDITED: for a better workaround

A more sensible alternative is to schedule a job (windows task scheduler + mysql.exe or linux + cron) that will run this batch, which preserves only 100 (change to suit) records

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文