更新同一个表后更新触发器中的表
在 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 列本身。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3