Продолжаю получать ошибку # 1064, когда я пытаюсь создать триггер в phpmyadmin - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать триггер для импорта поля из другой таблицы при вставке новой строки, но получаю сообщение об ошибке:

#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

Я использую вкладку sql в phpmyadmin для ввода кода.

Я прочитал все связанные с этим вопросы здесь, просматривал несколько других сайтов со статьями о триггерах 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 ;

Обе таблицы town2 и world_map существуют и имеют обязательные столбцы.

Насколько я могу судить, следует извлечь поле RegionID из любой строки в таблице world_map, в которой поля X & Y соответствуют новым столбцам mapx и mapy, но все, что я могу получить, - это ошибка.

Нет сомнений, что где-то в этом есть действительно простая ошибка, но я не могу ее найти, и вся помощь оказывается с большим удовольствием.

UPDATE Повторно создал код, как показано @Chris J ниже в форме триггера myphpadmin, проигнорировал большой красный X против оператора END и нажал кнопку 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 голосов
/ 11 января 2019

Хотя вы уже упоминали об этом, для меня отлично работает следующее:

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//

Это основано на предположении вашей схемы из вашего запроса. Триггер теперь существует и виден в Хайди следующим образом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...