Синтаксические ошибки MySQL DELIMITER - PullRequest
15 голосов
/ 09 июля 2009

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

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

ОШИБКА 1064 (42000) в строке 272. В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который следует использовать рядом с 'DELIMITER; DROP TRIGGER ЕСЛИ СУЩЕСТВУЕТ trigger_name; РАЗДЕЛИТЕЛЬ 'в строке 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 ]

24 голосов
/ 09 июля 2009

Попробуйте

DELIMITER ;

не

DELIMITER;

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

4 голосов
/ 09 июля 2009

Вам нужен пробел между 'DELIMITER' и ';'

DELIMITER ;
# not:
DELIMITER;
2 голосов
/ 20 ноября 2009

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

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

1 голос
/ 27 февраля 2013

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

DROP TRIGGER IF EXISTS trigger_name;</p> <p>CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |</p> <p>-- other statements or functions here</p> <p>

0 голосов
/ 03 сентября 2010

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

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

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
--
+
0 голосов
/ 02 сентября 2009

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

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

...