更新表时触发中断:解决问题
在数据库编程中,有时需要使用触发器更新表的列对同一个表进行更新操作。但是,如果触发器在表已更新时尝试更新表,则可能会导致错误。
考虑以下触发器:
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score FOR EACH ROW UPDATE products_score SET products_score.votes_total = (SELECT (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) FROM products_score WHERE id = new.id)
当使用以下命令执行更新操作时此触发器,错误“#1442 - 无法更新存储函数/触发器中的表'products_score',因为它已被调用此存储函数/触发器的语句使用”遇到。
要解决此问题,请将触发时间更改为 BEFORE 而不是 AFTER。这允许触发器在更新操作之前执行,避免表在更新期间被锁定。更新后的触发器应如下所示:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5 END ;
使用此修改后的触发器,表的列可以在更新操作后成功更新。
以上是如何解决 MySQL 触发器中的'无法更新表...因为它已被使用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!