Синтаксические ошибки разделителя MySQL

этот скрипт MySQL устанавливает несколько триггеров.

он работает на одной машине с MySQL 5.0.51 b-community. На другой машине под управлением MySQL 14.12 Distrib 5.0.45, для redhat-linux-gnu (i386) это не удается, с этим сообщением об ошибке, которое, похоже, связано с DELIMITER // ... // DELIMITER; синтаксис :

ошибка 1064 (42000) в строке 272: у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса используйте рядом 'DELIMITER; Drop TRIGGER, если существует trigger_name; DELIMITER' в строке 1

синтаксис скрипта (обобщенный):

DROP TRIGGER IF EXISTS trigger_name;
DELIMITER //
CREATE TRIGGER trigger_name BEFORE UPDATE ON table
FOR EACH ROW BEGIN
  -- Trigger logic goes here
END //
DELIMITER;

-- More trigger drop/create statements follow

что не так со скриптом, и как я могу его исправить?

6 ответов


попробовать

DELIMITER ;

не

DELIMITER;

вы на самом деле указываете ; в качестве аргумента DELIMITER команда, поэтому, не имея пространства, может быть запутанным.


вам нужно пространство между "разделителем " и";"

DELIMITER ;
# not:
DELIMITER;

просто как дополнение, для кого-то еще:

разделитель необходим, чтобы разрешить передачу всего определения на сервер в виде одного оператора.


в версии MySql я использую ту же ошибку, что и при использовании команды delimiter, но эта версия обрабатывает разделитель "; "для операторов и разделителя" | " для хранимых процедур и функций, которые, я думаю, решают проблему; попробуйте это:

DROP TRIGGER IF EXISTS trigger_name;

создать триггер trigger_name перед обновлением в таблице ДЛЯ КАЖДОЙ СТРОКИ НАЧИНАЕТСЯ -- Триггер идет здесь Конец!--2-->

-- другие операторы или функции


Хмм, у меня похожие проблемы. Я делаю mysqldump из Debian Lenny под управлением 5.0.51 и пытаюсь импортировать в OpenSolaris под управлением 5.0 и получить ту же ошибку. И у меня есть разделитель;

версия конфликта?


попробуйте ниже.

Я уверен, что это должно решить цель.

DELIMITER +
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS,
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; +

из вышесказанного, когда мы используем разделитель. Она должна быть в форме

DELIMITER +
--
BLOCK OF SQL WHATEVER YOU WANT TO MENTION
--
+