首页  >  文章  >  数据库  >  为什么我的MySQL触发器手动执行成功后无法更新PTS列?

为什么我的MySQL触发器手动执行成功后无法更新PTS列?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-06 07:05:02746浏览

Why Is My MySQL Trigger Failing to Update the PTS Column After Manual Execution Succeeds?

对用于更新游戏统计数据 PTS 的非功能性 MySQL 触发器进行故障排除

考虑此问题:尽管手动执行查询成功,旨在根据更改的 Played_games 值自动更新 PTS 列的触发器无法正常工作。触发器语法很简单:

<code class="sql">CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table`
FOR EACH ROW BEGIN
    IF (NEW.played_games <> OLD.played_games)
    THEN  
        update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));
    END IF;
END</code>

但是,进一步调查显示在尝试手动修改 Played_games 时出现错误:“无法更新存储函数/触发器中的表 pos_table,因为它已被调用此函数的语句使用”存储函数/触发器。”

解释:

此错误源于存储函数和触发器施加的约束。禁止它们更改调用语句已经读取或写入的表。

解决方案:

对于插入操作触发的触发器,如果​​您打算修改插入的值,使用 BEFORE INSERT 触发器并调整新值。

此外,触发器中编写的更新语句:

<code class="sql">update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));</code>

有缺陷。它更新整个表而不是单行。对于这种情况,在显示时计算 PTS 比使用专用列更有效。这消除了对触发器的需要并克服了与触发器相关的问题。

以上是为什么我的MySQL触发器手动执行成功后无法更新PTS列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn