首頁 >資料庫 >mysql教程 >為什麼我無法更新 MySQL 儲存函數或觸發器內的表?

為什麼我無法更新 MySQL 儲存函數或觸發器內的表?

Barbara Streisand
Barbara Streisand原創
2024-12-07 11:30:13789瀏覽

Why Can't I Update a Table Inside a MySQL Stored Function or Trigger?

MySQL 錯誤:儲存函數/觸發器中禁止更新

當嘗試更新 MySQL儲存函數或觸發器中的表時,您可能會遇到以下情況:遇到錯誤:

Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

理解錯誤

此錯誤源自於MySQL中的限制,即禁止在執行INSERT 觸發器時修改表。此類修改可能會導致死鎖或無限遞歸循環。

避免錯誤

要避免此錯誤,請考慮以下方法:

  • 使用新舊欄位:

    • 使用NEW.fieldname語法存取觸發器內的新值。
    • 使用 OLD.fieldname 語法存取觸發器內的舊值(如果執行 UPDATE)。
  • 修改觸發器上下文:

    • 將觸發器類型從 AFTER INSERT 變更為 BEFORE INSERT。
    • 將表修改程式碼移到儲存的函數或觸發器之外。

使用BEFORE INSERT 的範例觸發器:

假設您有一個full_brand_name 字段,並且需要建立一個包含前兩個大寫字母的Short_name 欄位:

CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_brand_name,1)) , LCASE(SUBSTRING(NEW.full_brand_name,2)))
END

以上是為什麼我無法更新 MySQL 儲存函數或觸發器內的表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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