2009-07-09 4 views
14

Этот скрипт MySQL устанавливает несколько триггеров.Ошибки синтаксиса MySQL DELIMITER

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

ERROR 1064 (42000) at line 272: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «DELIMITER»; DROP TRIGGER IF EXISTS 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 

Что плохого сценария, и как я могу это исправить?

ответ

22

Попробуйте

DELIMITER ; 

не

DELIMITER; 

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

+0

Я не понимал, что, спасибо за разъяснения :) – Sophia

4

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

DELIMITER ; 
# not: 
DELIMITER; 
0

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

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

+0

Казалось, что связанно с версиями для нас, одна версии работала без какой-либо точки с запятой, другие работал только с точкой с запятой, а другая требуется точка с запятой и место. – Sophia

2

Подобно тому, как дополнение, для кого-то еще:

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

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

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

В версии 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

+0

Какая версия это будет? –

Смежные вопросы