在MySQL 中執行儲存函數或觸發器時,可能會遇到錯誤:
Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
嘗試從儲存函數或觸發器內更新表時會發生此錯誤,由於潛在的死鎖或無限遞歸而禁止這樣做
INSERT 觸發器,例如提供的觸發器:
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
嘗試在INSERT 作業仍處於活動狀態時更新品牌名稱表。 MySQL 會阻止這種情況,以保持資料完整性並避免潛在的錯誤。
要解決此問題,請考慮使用以下方法:
例如,以下觸發器會根據 full_name 欄位中的值更新small_name 欄位:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.small_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
以上是為什麼 MySQL 會阻止儲存函數和觸發器中的資料表修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!