在Update上创建Mysql触发器,以更新同一个表中的另一行

问题描述 投票:0回答:1

我有一个名为 tblcustomfieldsvalues 的表,我想在其中创建一个触发器来更新同一个表中的行,这是该表: Table screenshot

目标是创造这样的条件:

  • 如果对应的值 = 'some car' 其中 relid=relid 且 fieldid=11,则更新的行将是 id=1
  • 如果对应的值 = '另一辆车',其中 relid=relid 且 fieldid=11,则更新的行将 id=4 等等...

我什至尝试创建一个临时表,但我总是遇到类似(无限循环)的错误...

mysql triggers entity-attribute-value
1个回答
0
投票

您无法在 MySQL 中使用触发器来执行您所描述的操作。

https://dev.mysql.com/doc/refman/8.0/en/faqs-triggers.html#faq-mysql-can-triggers-tables

触发器还可以影响其他表,但不允许修改已被调用函数或触发器的语句使用(用于读取或写入)的表。

原因是MySQL Server无法保证触发器不会造成无限循环。也就是说,UPDATE 生成触发器触发器,触发器更新同一个表,这会生成触发器的另一个执行,触发器又执行另一个更新,依此类推。

确保防止这种情况发生的唯一方法是禁止对生成触发器的同一个表进行 INSERT/UPDATE/DELETE。

所以你不能使用触发器来做你想做的事。

解决此问题的方法是您必须从客户端应用程序编写多个更新。

使用事务,以便将所有更新一起提交。

© www.soinside.com 2019 - 2024. All rights reserved.