MySQL插入上一行的值/ MySQL触发器多次触发,如何限制它们

sdnqo3pr  于 2023-02-03  发布在  Mysql
关注(0)|答案(1)|浏览(199)

我创建了一个日志触发器,它在每次更新其他表时运行,它创建一个包含日志信息的行。不幸的是,我正在使用的系统将一个操作作为多个查询执行,因此触发器被触发的次数比我需要的次数多得多。这是一个操作的输出。

在参数更新过程中,系统首先对参数和product_id匹配的每行执行单独的DELETE查询,然后对与product_id匹配的每个参数执行INSERT语句。因此,对每个参数查询都会触发触发器(在此产品中,每个INSERT触发7次,但在某些情况下,每个产品有100多个参数)
所以,我想把它减少到每个操作一行,最后一行。在未来的参数将由Webservice API更新,所以我正在寻找一个更简单的解决方案比用JS和PHP做事件。我想减去现在()与上一行中的日期匹配(具有相同的product_id),如果结果稍有不同或相同,我会删除前一行。我看到帖子和文章有滞后(),但似乎不适用于INSERT INTO查询。如果您有任何建议,请帮助

o2rvlv0m

o2rvlv0m1#

https://dev.mysql.com/doc/refman/8.0/en/faqs-triggers.html#faq-mysql-have-trigger-levels says:
MySQL 8.0有语句级触发器还是行级触发器?
在MySQL 8.0中,所有触发器都是FOR EACH ROW;也就是说,对于插入、更新或删除的每一行都激活触发器。MySQL 8.0不支持使用FOR EACH STATEMENT的触发器。
MySQL支持的触发器类型似乎不太适合您的情况,我建议您简单地执行插入操作,然后从应用程序中执行删除操作,而不是从触发器中执行。

相关问题