创建触发器时出现错误 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的主要内容,如果未能解决你的问题,请参考以下文章