无法创建一个触发器来插入连续值
问题描述:
我想创建一个触发器来连接我的表列成一个列,但我找不到错误。无法创建一个触发器来插入连续值
代码:
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 ;
或者你删除begin
和end
。
现在,你有另一个问题。您正试图在触发器所在的同一张表的触发器中执行一个操作。这是不允许的。将您的触发器更改为:
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次。这不是你想要做的:)
解决了我的问题:)感谢您的优秀解释顺便说一句! – 2014-12-09 15:27:14