MySQL DELIMITER语法错误

t3irkdon  于 2023-06-21  发布在  Mysql
关注(0)|答案(7)|浏览(210)

此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 IF EXISTS触发器名称;第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

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

yvt65v4c

yvt65v4c1#

试试看

DELIMITER ;

没有任何

DELIMITER;

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

pinkon5k

pinkon5k2#

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

DELIMITER ;
# not:
DELIMITER;
s4n0splo

s4n0splo3#

作为一个附加组件,对于其他人:
分隔符是使整个定义能够作为单个语句传递到服务器所必需的。

erhoui1w

erhoui1w4#

试试下面的。
我相信它应该解决的目的。

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
--
+
xoshrz7s

xoshrz7s5#

在我使用的MySql版本中,使用delimiter命令时也会出现同样的错误,但这个版本处理的是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
`
``

bvuwiixz

bvuwiixz6#

我也有类似的问题。我从运行5.0.51的Debian Lenny执行mysqldump,并尝试导入到运行5.0的OpenMP,得到相同的错误。而我,却有一种执着。
版本冲突?

wfypjpf4

wfypjpf47#

DELIMITER // CREATE TRIGGER age_verified BEFORE INSERT ON customers FOR EACH ROW IF new.age<0 THEN SET new.age=0 END IF;//

相关问题