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

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

Barbara Streisand
發布: 2024-12-07 11:30:13
原創
797 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板