当我尝试在phpmyadmin中创建触发器时,不断收到错误#1064

时间:2019-01-11 19:48:06

标签: mysql triggers phpmyadmin

我正在尝试创建一个触发器,以在插入新行时从另一个表中导入字段,但会收到错误消息:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 6

我正在使用phpmyadmin中的sql标签输入代码。

我在这里阅读了所有相关问题,在其他几个站点上也浏览了有关mysql触发器的文章,但找不到任何有用的信息。

  • 我尝试过// //在END //
  • 之前的行尾
  • 我尝试过;在END //
  • 之前的行末

似乎没有任何作用。

我的触发代码:

DELIMITER //
CREATE TRIGGER towns2_before_insert
BEFORE INSERT ON towns2 FOR EACH ROW
BEGIN
SET NEW.regionid = (Select RegionID from world_map
where (world_map.X = new.mapx) AND (world_map.Y = new.mapy))
END//
DELIMITER ;

towns2和world_map这两个表都存在,并且具有必需的列。

据我所知,应该从world_map表中具有与新的mapx和mapy列匹配的X和Y字段的行中提取RegionID字段,但我能得到的只是这个错误。

毫无疑问,我在某个地方遇到了一个非常简单的错误,但是对于我一生来说,我找不到它,并且可以得到所有帮助。

更新 重新创建代码,如下面的myphpadmin触发器表单中的@Chris J所示,忽略END语句上的红色大X,然后按GO按钮-它起作用了,所以我想问题不在于我的代码,而是我选择的方法创建触发器的过程。 phpmyadmin创建的代码如下所示:

CREATE TRIGGER `towns2_before_insert` BEFORE INSERT ON `towns2`
 FOR EACH ROW BEGIN
SET NEW.regionid =
(Select RegionID from world_map
where (X = new.mapx) AND (Y = new.mapy));
END

1 个答案:

答案 0 :(得分:0)

尽管您已经提到过,但以下内容对我来说很完美:

DELIMITER //
CREATE TRIGGER towns2_before_insert
BEFORE INSERT ON towns2 FOR EACH ROW
BEGIN
SET NEW.regionid = (Select RegionID from world_map
where (world_map.X = new.mapx) AND (world_map.Y = new.mapy));
END//

这是基于对查询的架构猜测。触发器现已存在,并在Heidi中可见,如下所示:

enter image description here