如何在包含phpmyadmin中早于X天的记录的表上创建删除触发器

如何在包含phpmyadmin中早于X天的记录的表上创建删除触发器,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我有一个名为global\u notif的表,它有两列date(日期)和notifications(文本)。日期格式显示为YYYY-MM-DD。 现在,我想应用一个触发器来删除所有超过2天的记录。 所以我写了这个定义: DELETE FROM global_notif WHERE date < DATE_SUB(NOW(), INTERVAL 2 DAY); 从全局删除\u notif 其中日期

我有一个名为
global\u notif
的表,它有两列
date
(日期)和
notifications
(文本)。日期格式显示为YYYY-MM-DD。 现在,我想应用一个触发器来删除所有超过2天的记录。 所以我写了这个定义:

DELETE FROM global_notif
WHERE date < DATE_SUB(NOW(), INTERVAL 2 DAY); 
从全局删除\u notif
其中日期<日期(现在(),间隔2天);
窗口的屏幕截图如下所示: 点击go后,显示触发器设置成功。 问题是,它根本不起作用。但是,当我单独运行上述查询时,查询运行良好并删除所需的记录。 所以,我想知道为什么这个触发器不会删除记录。另外,如果有人能告诉我,在删除之前这个触发器是否会对我想做的事情起作用。
谢谢。

触发器用于在任何表中执行任何操作,然后您要执行该操作。 但对于您的情况,最好使用存储过程

CREATE PROCEDURE `deleteNotification`(X INT)
BEGIN

   DELETE FROM global_notif
   WHERE (global_notif.date < DATE_SUB(NOW(), INTERVAL X DAY));

END;

在上面的查询中,2是天数。

If在删除之前对一个本身从表中删除的表设置触发器似乎没有意义(因此触发自身删除,等等)。我认为MySQL会阻止这一点(我希望如此,以避免无休止的循环),但我希望出现一条错误消息。你能建议我其他有效的方法来删除表中的记录吗?这不太可能。MySQL确实支持查询的定时执行,尽管我从未使用过它们(不确定大多数MySQL安装中是否启用了它们)。只有在手动删除记录时(即,如果删除记录),才会触发触发器。如果它是一个定期添加到更新的表,并且您只想删除旧记录,那么最好将删除与insert触发器关联。Read@RavinderReddy我也尝试过使用事件调度器,但也不起作用:(为这样一个琐碎的任务创建一个存储过程是浪费时间和精力的。当我执行第二条语句时,出现了以下错误。
#1442-无法更新存储函数/触发器中的表'global_notif',因为调用此存储函数/触发器的语句已经在使用它。
@me.ydv.5-我假设您已经使用了d是否从before delete触发器调用此过程?因为这是我希望MySQL发出的消息。
CALL deleteNotification(2);