遇到無回應的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中文網其他相關文章!