遇到无响应的 MySQL 触发器可能会令人沮丧,尤其是当手动执行查询时,查询可以完美运行。在这种情况下,问题通常在于触发器的语法或存储函数和触发器施加的限制。
提供的触发器语法看起来很简单并且遵循预期的模式。但是,仔细检查括号和分号的位置非常重要,确保它们放置正确并且不会导致任何语法错误。
关键限制之一使用存储函数和触发器时请注意,它们无法修改调用语句当前正在使用的表。文档中清楚地概述了此限制:
<code class="text">"A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."</code>
在提供的触发器中,语句 update pos_table set PTS=((NEW.won_games*2) (NEW.tie_games*1));尝试更新触发器正在修改的同一表(pos_table)(因为它在 pos_table 上的 UPDATE 上触发)。违反上述限制会导致手动编辑 Played_games 列时遇到错误。
要绕过存储函数/触发器限制所施加的限制,建议考虑使用如果您打算在插入期间修改值,则使用不同的触发器类型,例如 BEFORE INSERT。然而,在这种特殊情况下,PTS 的计算可以在显示值时直接执行,从而无需存储触发器或函数。这种方法简化了代码并避免了与存储函数/触发器限制的潜在冲突。
以上是为什么我的 MySQL 触发器不工作:是语法错误还是存储函数/触发器限制?的详细内容。更多信息请关注PHP中文网其他相关文章!