對用於更新遊戲統計資料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>有缺陷。這消除了對觸發器的需求並克服了與觸發器相關的問題。
以上是為什麼我的MySQL觸發器手動執行成功後無法更新PTS列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!