Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Can';t创建触发器以插入concat值_Mysql_Triggers_Concat - Fatal编程技术网

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次。这不是你想做的:)

解决了我的问题:)谢谢你的精彩解释!