MySQL DELIMITER语法错误

时间:2009-07-09 06:16:47

标签: sql mysql triggers delimiter

此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

脚本有什么问题,我该如何纠正?

6 个答案:

答案 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
--
+