【问题标题】:Keep getting error #1064 when I try to create a trigger in phpmyadmin当我尝试在 phpmyadmin 中创建触发器时,不断收到错误 #1064
【发布时间】:2019-06-06 18:25:24
【问题描述】:

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

#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 字段,但我能得到的只是这个错误。

毫无疑问,我在某个地方遇到了一个非常简单的错误,但我一生都找不到它,所有的帮助都得到了极大的帮助。

更新 重新创建代码,如下面的@Chris J 在 myphpadmin 触发器表单中所示,忽略了 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

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:

    虽然您已经提到过,但以下内容对我来说非常有效:

    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 中可见,如下所示:

    【讨论】:

    • 只需在 phpmyadmin 的触发器表单中输入与屏幕截图完全相同的代码。我在 END 的行上得到一个红色的 X 表示错误,但仍然继续并且它有效:) 谢谢@Chris J
    • 如果可以的话,可能值得使用 HeidiSQL 之类的东西 - phpmyadmin 在使用更复杂的查询给出假阴性时可能会很麻烦
    • 谢谢@Chris J - 今晚/明天晚些时候我会去看看。
    猜你喜欢
    • 2021-05-24
    • 2020-09-06
    • 2022-06-15
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2011-06-27
    • 2016-05-05
    相关资源
    最近更新 更多