更新同一个表的 MySQL 触发器解决方法
MySQL 本质上限制触发器更新它们分配到的同一个表中的行,从而防止递归调用。尽管存在此限制,仍然存在可行的解决方法。
建议的解决方法
不要直接更新触发器中的行,而是利用执行所需逻辑的存储过程。此方法将行更新任务与触发器分离,并允许您规避限制。
示例
考虑以下场景:
<code class="sql">CREATE TABLE MyTable ( id INT PRIMARY KEY, attribute VARCHAR(255) ); -- Trigger to insert a row into MyTable for each new parent product record CREATE TRIGGER my_trigger AFTER INSERT ON Products FOR EACH ROW BEGIN -- Issue SQL statement to call a stored procedure that performs the insert CALL insert_attribute(NEW.id, 'Value'); END;</code>
在上面的示例中,当一条新记录插入到 Products 表中时,触发器 my_trigger 调用存储过程 insert_attribute 在 MyTable 中插入一行,有效模仿了触发器内直接行更新的功能。
其他注意事项
虽然此解决方法可作为功能解决方案,但值得注意的是,它在性能和可维护性方面与传统触发器不同。与直接触发器更新相比,存储过程会给数据库系统带来额外的开销和复杂性。
以上是如何在 MySQL 触发器中更新同一个表?的详细内容。更多信息请关注PHP中文网其他相关文章!