对用于更新游戏统计数据 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中文网其他相关文章!