Mysql Can';t创建触发器以插入concat值
我试图创建一个触发器,将表列连接到单个列中,但找不到错误 代码:Mysql Can';t创建触发器以插入concat值,mysql,triggers,concat,Mysql,Triggers,Concat,我试图创建一个触发器,将表列连接到单个列中,但找不到错误 代码: 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_
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;
错误:
#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解要使用的正确语法
在第6行的“”附近
您得到这个错误,因为您用
begin
启动了一个“多语句”块,但是在update
语句之后,在结束之前终止create trigger
语句代码>语句。
您必须更改分隔符
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 ;
或者删除开始
和结束
create trigger molecule_trigger After insert on molecule
For each row
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);
现在,你有另一个问题了。您正试图在触发器工作的同一个表上的触发器中执行操作。这是不允许的。将触发器更改为:
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);
但是请注意,这将仅为插入的列设置Molecular_文本。每次插入一行时,触发器都会更新整个表。如果在一条语句中插入3行,表将更新3次。这不是你想做的:)解决了我的问题:)谢谢你的精彩解释!