2014-12-09 46 views
1

我想創建一個觸發器來連接我的表列成一個列,但我找不到錯誤。無法創建一個觸發器來插入連續值

代碼:

create trigger molecule_trigger After insert on molecule 
For each row 
begin 

Update molecule 
Set molecule_text= CONCAT(mid,',',ULCHEm_ID,',',IUPAC_name,',',Inchi,',',inchi_key,',',smiles,',',can_smiles,',',Molecular_formula,',',Molecular_weight,',',vendor,',',CAS,',',links,',',image); 
end; 

ERROR: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

回答

1

你得到這個錯誤,因爲您在update聲明後begin開始了「多個語句」塊,但;終止create trigger聲明end;語句之前。
你必須要麼改變分隔符

DELIMITER $$ 
create trigger molecule_trigger After insert on molecule 
For each row 
begin 

Update molecule 
Set molecule_text= CONCAT(mid,',',ULCHEm_ID,',',IUPAC_name,',',Inchi,',',inchi_key,',',smiles,',',can_smiles,',',Molecular_formula,',',Molecular_weight,',',vendor,',',CAS,',',links,',',image); 
end $$ 
DELIMITER ; 

或者你刪除beginend

​​

現在,你有另一個問題。您正試圖在觸發器所在的同一張表的觸發器中執行一個操作。這是不允許的。將您的觸發器更改爲:

create trigger molecule_trigger BEFORE insert on molecule 
For each row 
SET NEW.molecule_text= CONCAT_WS(',', NEW.mid, NEW.ULCHEm_ID, NEW.IUPAC_name, NEW.Inchi, NEW.inchi_key, NEW.smiles, NEW.can_smiles, NEW.Molecular_formula, NEW.Molecular_weight, NEW.vendor, NEW.CAS, NEW.links, NEW.image); 

但請注意,它僅爲插入的列設置了molecule_text。每次插入行時,觸發器都會更新整個表格。如果你在一個語句中插入3行,你的表會被更新3次。這不是你想要做的:)

+0

解決了我的問題:)感謝您的優秀解釋順便說一句! – 2014-12-09 15:27:14