3 回答

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
INSERT觸發(fā)器觸發(fā)時(shí),您無法更改表。INSERT可能會(huì)執(zhí)行某些鎖定,這可能會(huì)導(dǎo)致死鎖。此外,從觸發(fā)器更新表將導(dǎo)致相同的觸發(fā)器在無限遞歸循環(huán)中再次觸發(fā)。這兩個(gè)原因都是MySQL阻止你這樣做的原因。
但是,根據(jù)您要實(shí)現(xiàn)的目標(biāo),您可以使用NEW.fieldname訪問新值,甚至可以使用舊值(如果使用OLD進(jìn)行更新)來訪問新值。
如果您有一行命名,full_brand_name
并且您希望在字段中使用前兩個(gè)字母作為短名稱,則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

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
正確的語法是:
FOR EACH ROW SET NEW.bname = CONCAT( UCASE( LEFT( NEW.bname, 1 ) ) , LCASE( SUBSTRING( NEW.bname, 2 ) ) )

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
“BEFORE-INSERT”-trigger是在插入上實(shí)現(xiàn)相同表更新的唯一方法,并且只能從MySQL 5.5+中實(shí)現(xiàn)。但是,自動(dòng)增量字段的值僅適用于“AFTER-INSERT”觸發(fā)器 - 在BEFORE情況下默認(rèn)為0。因此,以下示例代碼將根據(jù)自動(dòng)增量值設(shè)置先前計(jì)算的代理鍵值id
,但不會(huì)實(shí)際工作,因?yàn)镹EW.id將始終為0:
create table products(id int not null auto_increment, surrogatekey varchar(10), description text);create trigger trgProductSurrogatekey before insert on productfor each row set NEW.surrogatekey = (select surrogatekey from surrogatekeys where id = NEW.id);
添加回答
舉報(bào)