Синтаксические ошибки разделителя 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
команда, поэтому, не имея пространства, может быть запутанным.
просто как дополнение, для кого-то еще:
разделитель необходим, чтобы разрешить передачу всего определения на сервер в виде одного оператора.
в версии 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
--
+