首頁  >  文章  >  資料庫  >  為什麼我的MySQL觸發器手動執行成功後無法更新PTS列?

為什麼我的MySQL觸發器手動執行成功後無法更新PTS列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-06 07:05:02749瀏覽

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>
有缺陷。這消除了對觸發器的需求並克服了與觸發器相關的問題。

以上是為什麼我的MySQL觸發器手動執行成功後無法更新PTS列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn