更新同一个表的 MySQL 触发器解决方法
MySQL 本质上限制触发器更新它们分配到的同一个表中的行,从而防止递归调用。尽管存在此限制,仍然存在可行的解决方法。
建议的解决方法
不要直接更新触发器中的行,而是利用执行所需逻辑的存储过程。此方法将行更新任务与触发器分离,并允许您规避限制。
示例
考虑以下场景:
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;
在上面的示例中,当一条新记录插入到 Products 表中时,触发器 my_trigger 调用存储过程 insert_attribute 在 MyTable 中插入一行,有效地模仿了直接行更新的功能触发器。
其他注意事项
虽然此解决方法是一个功能性解决方案,但值得注意的是,它在性能和可维护性方面与传统触发器不同。与直接触发器更新相比,存储过程会给数据库系统带来额外的开销和复杂性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3