Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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触发器上出现错误1064_Mysql_Sql_Triggers_Syntax Error - Fatal编程技术网

Mysql触发器上出现错误1064

Mysql触发器上出现错误1064,mysql,sql,triggers,syntax-error,Mysql,Sql,Triggers,Syntax Error,我正在MySQL中编写一个触发器来记录表更新的日志。日志表称为individuo_storico,目标表称为individuo。当individuo更新时,我想检查IDQualifica和IDLivello是否更改,如果是,则插入individuo_storico中的记录 我写下了这段代码,但我得到了一个#1064错误,语法错误在哪里 use ore; create trigger individuo_update after update on individuo for each row b

我正在MySQL中编写一个触发器来记录表更新的日志。日志表称为individuo_storico,目标表称为individuo。当individuo更新时,我想检查IDQualifica和IDLivello是否更改,如果是,则插入individuo_storico中的记录

我写下了这段代码,但我得到了一个#1064错误,语法错误在哪里

use ore;
create trigger individuo_update after update on individuo
for each row
begin
    if ( NEW.IDLivello <> OLD.IDLivello or NEW.IDQualifica <> OLD.IDQualifica) then
        insert into individuo_storico(IDIndividuo, IDQualifica, IDLivello) 
        values (NEW.IDIndividuo, NEW.IDQualifica, NEW.IDLivello);
    end if;
end;
使用矿石;
在individuo上更新后创建触发器individuo\u更新
每行
开始
如果(NEW.idlivelo OLD.idlivelo或NEW.IDQualifica OLD.IDQualifica),则
插入个人档案(IDIDIVIDUO、IDQualifica、IDLivello)
值(NEW.ididividuo、NEW.IDQualifica、NEW.idlivelo);
如果结束;
结束;
1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取第6行“”附近要使用的正确语法


请用必要的名字来包装你的触发器创建,这样db引擎就不会阻塞它。因此,有三个方面:

1) line 1
2) right after the end; 
3) and then a reset to a default delimiter. 
同样的概念也适用于存储过程创建

DELIMITER $$
create trigger individuo_update after update on individuo
for each row
begin
    if ( NEW.IDLivello <> OLD.IDLivello or NEW.IDQualifica <> OLD.IDQualifica) then
        insert into individuo_storico(IDIndividuo, IDQualifica, IDLivello) 
        values (NEW.IDIndividuo, NEW.IDQualifica, NEW.IDLivello);
    end if;
end;$$
DELIMITER ;
分隔符$$
在individuo上更新后创建触发器individuo\u更新
每行
开始
如果(NEW.idlivelo OLD.idlivelo或NEW.IDQualifica OLD.IDQualifica),则
插入个人档案(IDIDIVIDUO、IDQualifica、IDLivello)
值(NEW.ididividuo、NEW.IDQualifica、NEW.idlivelo);
如果结束;
结束$$
定界符;

您缺少分隔符,请在开头添加
分隔符/
,然后添加最后一行
结尾应为
end;//定界符您使用的是哪个版本的mysql?@JahirulIslamBhuiyan$mysql——版本mysql版本14.14发行版5.5.44,适用于使用readline 6.3的debian linux gnu(i686)。第一个答案是OK。我不喜欢评论我的代码答案,但即使是我也会解释这样的答案。你能补充点什么吗?