【问题标题】:Can't create a trigger to insert concat value无法创建触发器来插入 concat 值
【发布时间】:2014-12-09 12:25:20
【问题描述】:

我正在尝试创建一个触发器来将我的表列连接成一个列,但我找不到错误。

代码:

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 行的 '' 附近

【问题讨论】:

    标签: mysql triggers concat


    【解决方案1】:

    您收到此错误,因为您使用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 ;
    

    或者你删除beginend

    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 次。无论如何,这不是你想做的:)

    【讨论】:

    • 解决了我的问题 :) 顺便说一句,感谢您的出色解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多