Синтаксические ошибки MySQL DELIMITER

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

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

ОШИБКА 1064 (42000) в строке 272: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с "DELIMITER"; DROP TRIGGER IF EXISTS trigger_name; DELIMITER 'в строке 1

Синтаксис script (суммирован):

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

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

Ответы

Ответ 1

Try

DELIMITER ;

не

DELIMITER;

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

Ответ 2

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

DELIMITER ;
# not:
DELIMITER;

Ответ 3

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

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

Ответ 4

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

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

Ответ 5

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

Конфликт версий?

Ответ 6

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

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

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. Он должен быть в форме

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