在同一表上更新后更新触发器中的表
在 SQL 中,在更新同一表后在触发器中更新表同一张表提出了一个潜在的问题。这是因为该表已针对更新操作锁定,并且尝试在作为同一事务的一部分执行的触发器内访问该表可能会导致冲突。
要规避此限制,您可以更新通过使用 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 ;
在此示例中,触发器将在 products_score 表上的每次更新操作之前执行。它将根据更新的列(votes_1 到 votes_5)的值计算 votes_total 列的新值,并将其存储在触发器上下文提供的 new.votes_total 虚拟列中。
当您更新表时,触发器将确保 votes_total 列相应更新,即使更新语句没有显式更新 votes_total 列本身。
以上是在 SQL 中更新同一个表后,如何安全地更新触发器内的表?的详细内容。更多信息请关注PHP中文网其他相关文章!