您收到此错误,因为您使用begin 启动了一个“多语句”块,但在您的update 语句之后的; 在end; 语句之前终止了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 ;
或者你删除begin和end。
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);
但请注意,这只会为插入的列设置分子文本。每次插入一行时,您的触发器都会更新整个表。如果你在一个语句中插入 3 行,你的表会更新 3 次。无论如何,这不是你想做的:)