无法创建一个触发器来插入连续值

问题描述:

我想创建一个触发器来连接我的表列成一个列,但我找不到错误。无法创建一个触发器来插入连续值

代码:

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

你得到这个错误,因为您在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