同一个表更新后触发更新
在数据库系统中,触发器用于在表中发生某些事件时自动执行特定操作。在更新表后尝试从触发器内更新同一个表时,会出现一个常见的挑战。
考虑以下触发器:
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);
当尝试按如下方式更新表时:
UPDATE products_score SET votes_1 = 5 WHERE id = 0;
触发器失败并出现错误:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
要解决此问题,触发器必须修改为在更新事件之前执行,而不是之后。这允许触发器在应用原始更新语句之前更新表:
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;
通过此修改,像以前一样更新表将成功触发 votes_total 列更新。
以上是使用更新后触发器时如何防止'无法更新存储函数/触发器中的表”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!