我正在執行 MySQL 查詢。但是,當從表單輸入新增行時,我收到此錯誤:
Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
從程式碼:
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
這個錯誤是什麼意思?
P粉5738097272023-10-16 17:19:55
正確的語法是:
FOR EACH ROW SET NEW.bname = CONCAT( UCASE( LEFT( NEW.bname, 1 ) ) , LCASE( SUBSTRING( NEW.bname, 2 ) ) )
P粉9211651812023-10-16 11:22:02
當 INSERT
觸發器觸發時,您無法變更表。 INSERT
可能會執行一些鎖定操作,這可能會導致死鎖。此外,從觸發器更新表將導致相同觸發器在無限遞歸循環中再次觸發。這兩個原因都是 MySQL 阻止您這樣做的原因。
但是,根據您想要實現的目標,您可以使用NEW.fieldname
存取新值,甚至可以使用舊值 - 如果執行UPDATE
-- 與OLD
。
如果您有一個名為 full_brand_name
的行,並且您想要在 small_name
欄位中使用前兩個字母作為短名稱,您可以使用:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END