首页 > 数据库 > mysql教程 > 在 SQL 中更新同一个表后,如何安全地更新触发器内的表?

在 SQL 中更新同一个表后,如何安全地更新触发器内的表?

Mary-Kate Olsen
发布: 2024-12-21 16:15:14
原创
953 人浏览过

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

在同一表上更新后更新触发器中的表

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板