Mysql 从数据库中删除行的SQL触发器

Mysql 从数据库中删除行的SQL触发器,mysql,triggers,Mysql,Triggers,我有一个工业系统,可以将警报记录到远程托管的MySQL数据库中。每当报警属性发生变化(如报警被激活、确认或关闭的时间)时,工业系统会在名为“报警”的表中插入新行 我不希望每个报警都有多个记录,所以我设置了两个数据库触发器。第一个触发器将每个新记录镜像到第二个表,根据需要创建/更新行。第二个表(“报警显示”)将“标记”列设置为主键。“报警”表没有主键。此触发器的代码为: CREATE TRIGGER `mirror_alarms` BEFORE INSERT ON `alarms` FOR E

我有一个工业系统,可以将警报记录到远程托管的MySQL数据库中。每当报警属性发生变化(如报警被激活、确认或关闭的时间)时,工业系统会在名为“报警”的表中插入新行

我不希望每个报警都有多个记录,所以我设置了两个数据库触发器。第一个触发器将每个新记录镜像到第二个表,根据需要创建/更新行。第二个表(“报警显示”)将“标记”列设置为主键。“报警”表没有主键。此触发器的代码为:

CREATE TRIGGER `mirror_alarms` BEFORE INSERT ON `alarms`
  FOR EACH ROW 
    INSERT INTO `alarm_display` (Tag,...,OffTime) 
    VALUES (new.Tag,...,new.OffTime) 
    ON DUPLICATE KEY UPDATE OnDate=new.OnDate,...,OffTime=new.OffTime
第二个触发器应该在第一个触发器之后执行,并且(理想情况下)从alarms表中删除所有行。(我使用了报警的Tag属性,因为Tag属性从未更改,尽管我怀疑我可以使用“DELETE FROM alarms WHERE 1”语句来达到相同的效果)

我的问题是第二个触发器似乎没有运行,或者如果它运行了,第二个触发器不会从数据库中删除任何行


所以问题是:为什么我的第二个触发器没有达到我期望的效果?

可以在这里阅读解释:

在存储的函数或触发器中, 不允许修改表格 这已经被(用于)了 (读或写)通过陈述 调用函数或触发器的

这是您的问题,您的触发器以错误#1442结束

调用触发器(insert)的语句已在使用表
alarms
。这本质上意味着您不能使用删除触发器修改报警


干杯

太棒了。谢谢我希望将所有内容都保存在SQL中,但我想我将设置一个cron作业来定期清除数据库:)
CREATE TRIGGER `remove_alarms` AFTER INSERT ON `alarms`
  FOR EACH ROW DELETE FROM alarms WHERE Tag=new.Tag