创建触发器时出现错误 1064

Posted

技术标签:

【中文标题】创建触发器时出现错误 1064【英文标题】:Error 1064 when creating Trigger 【发布时间】:2015-10-01 12:27:39 【问题描述】:

我正在使用 mysql 5.6 和 phpMyAdmin 4.1.14

我正在尝试创建一个触发器,它将数据从一个数据库复制到另一个数据库,但出现以下错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“new.airplane_id,new.user_id,new.icao24,new.created_at,new.timestamp,new.altitude”附近使用正确的语法

任何指点将不胜感激

我的代码是:

CREATE TRIGGER airfields_insert 
BEFORE INSERT 
ON realtime 
FOR EACH ROW
BEGIN
if (new.squawk between 6160 and 6167 or new.squawk between 6171 and 6177) and new.altitude <= 4000 then 
insert into airfields (airplane_id,user_id,icao24,created_at,timestamp,altitude,flight_number,latitude,longitude,heading,squawk,horizontal_speed,vertical_speed,Interested) (new.airplane_id,new.user_id,new.icao24,new.created_at,new.timestamp,new.altitude,new.flight_number,new.latitude,new.longitude,new.heading,new.squawk,new.horizontal_speed,new.vertical_speed,new.Interested);
end if;

【问题讨论】:

除了VALUES关键字你还缺少END,你需要DELIMITER 【参考方案1】:

您的INSERT 语句中缺少VALUES 关键字

您当前的INSERT 查询

insert into airfields (airplane_id,user_id,icao24,.......) 
(new.airplane_id,new.user_id,new.icao24,........);
end if;

应该是

insert into airfields (airplane_id,user_id,icao24,.......) 
values (new.airplane_id,new.user_id,new.icao24,........);
end if;

另外,您在END IF 之后缺少END 关键字

【讨论】:

非常感谢您的回答拉胡尔。不幸的是,这不能满足我的要求。一旦生效,触发器就会停止进入原始表的任何其他内容(实时)。我认为我将不得不重新考虑整个事情。也许触发器不是我想要实现的目标。【参考方案2】:

您在插入查询中有语法错误您的查询应该是这样的

insert into airfields (airplane_id,user_id,icao24,.......) 
values (new.airplane_id,new.user_id,new.icao24,........);

或者干脆

 insert into airfields values (new.airplane_id,new.user_id,new.icao24,........);

表单没有指定数据将被插入的列名,只指定它们的值:

【讨论】:

以上是关于创建触发器时出现错误 1064的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 中创建触发器时出现错误“1064”?

MySQL - 在第 1 行附近创建触发器错误 1064

当我尝试在 mysql 中创建触发器时出现语法错误

为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?

运行查询以创建表时出现错误 1064?

编译触发器时出现 Oracle 错误 ORA-00922