16

这个 MySQL 脚本安装了多个触发器。

它可以在一台运行 MySQL 5.0.51b-community 的机器上运行。在另一台运行 MySQL 14.12 Distrib 5.0.45 的机器上,对于 redhat-linux-gnu (i386),它会失败,并显示此错误消息,这似乎与DELIMITER // ... // DELIMITER; 句法 :

第 272 行的错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'DELIMITER; 附近使用的正确语法;DROP TRIGGER IF EXISTS trigger_name; 第 1 行的 DELIMITER'

脚本语法(总结)是:

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

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

4

6 回答 6

26

尝试

DELIMITER ;

不是

DELIMITER;

您实际上是指定;DELIMITER命令的参数,因此没有空间可能会混淆它。

于 2009-07-09T06:27:33.773 回答
4

'DELIMITER' 和 ';' 之间需要一个空格

DELIMITER ;
# not:
DELIMITER;
于 2009-07-09T06:25:32.293 回答
3

就像附加组件一样,对于其他人:

需要分隔符才能将整个定义作为单个语句传递给服务器。

于 2009-11-20T11:16:58.360 回答
1

试试下面的。

我相信它应该解决这个目的。

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
--
+
于 2010-09-02T22:16:34.980 回答
1

在 MySql 的版本中,我使用 delimiter 命令时会出现同样的错误,但是这个版本处理了分隔符“;” 对于语句和分隔符“|” 对于存储过程和函数,我认为可以解决问题;试试这个:

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

于 2013-02-27T17:36:16.103 回答
0

嗯,我也有类似的问题。我从运行 5.0.51 的 Debian Lenny 执行 mysqldump 并尝试导入到运行 5.0 的 OpenSolaris 并得到相同的错误。我有 DELIMITER ;

版本冲突?

于 2009-09-02T09:41:36.507 回答