此MySQL脚本安装多个触发器。
它适用于运行MySQL 5.0.51b-community的一台计算机。在另一台运行MySQL 14.12 Distrib 5.0.45的机器上,对于redhat-linux-gnu(i386),它失败了,这个错误消息似乎与DELIMITER // ... // DELIMITER
有关;语法:
ERROR 1064(42000)第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
脚本有什么问题,我该如何纠正?
答案 0 :(得分:24)
尝试
DELIMITER ;
不
DELIMITER;
您实际上是将;
指定为DELIMITER
命令的参数,因此没有空格可能会让它感到困惑。
答案 1 :(得分:4)
“DELIMITER”和“;”之间需要一个空格
DELIMITER ;
# not:
DELIMITER;
答案 2 :(得分:2)
就像其他人一样的附加组件:
需要使用分隔符将整个定义作为单个语句传递给服务器。
答案 3 :(得分:1)
在MySql版本中,使用delimiter命令时会出现相同的错误,但此版本处理分隔符“;” for语句和分隔符“|”对于存储过程和函数,我认为这解决了问题;试试这个:
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
答案 4 :(得分:0)
嗯我有类似的问题。我从Debian Lenny运行5.0.51运行mysqldump并尝试导入运行5.0的OpenSolaris并获得相同的错误。我有DELIMITER;
版本冲突?
答案 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时。它应该是
的形式DELIMITER +
--
BLOCK OF SQL WHATEVER YOU WANT TO MENTION
--
+