MySQL 中的触发器和表更新
在使用触发器进行 INSERT 操作后尝试更新同一个表时,用户可能会遇到以下错误“无法更新表 ACCOUNTS ...已被调用此触发器的语句使用。”此限制源于对修改触发语句当前正在使用的表的限制。
要解决此问题,不可能仅依赖触发器。相反,应该创建一个存储过程来处理单个事务中的 INSERT 和更新操作。通过使用存储过程手动提交更改,用户可以规避触发器施加的约束。
实施存储过程解决方法的步骤:
CREATE PROCEDURE update_accounts_status(IN new_account_pk BIGINT) AS BEGIN -- Insert new account INSERT INTO ACCOUNTS (user_id, edit_on, status) VALUES (?, ?, 'A'); -- Update old account UPDATE ACCOUNTS SET status = 'E' WHERE pk = ?; -- Commit changes COMMIT; END
存储过程可以不使用触发器,而是可以在 INSERT 到 ACCOUNTS 表时被调用。这可确保插入和更新操作在单个事务中成功执行并提交。
使用存储过程的优点:
以上是如何在 INSERT 触发器后更新 MySQL 表而不出现错误?的详细内容。更多信息请关注PHP中文网其他相关文章!