Ответ 1
Try
DELIMITER ;
не
DELIMITER;
Фактически вы указываете ;
как аргумент команды 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 и как я могу его исправить?
Try
DELIMITER ;
не
DELIMITER;
Фактически вы указываете ;
как аргумент команды DELIMITER
, поэтому не имея пробела, это может ввести в заблуждение.
Вам нужно пространство между "DELIMITER" и ";"
DELIMITER ;
# not:
DELIMITER;
Как дополнение, для кого-то еще:
Отделитель требуется для того, чтобы все определение было передано на сервер в виде одного оператора.
В версии 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
Хм, у меня похожие проблемы. Я делаю mysqldump из Debian Lenny, работающего 5.0.51, и попробую импортировать в OpenSolaris с запуском 5.0 и получить ту же ошибку. И у меня есть DELIMITER;
Конфликт версий?
Попробуйте ниже.
Я уверен, что он должен решить эту задачу.
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
--
+