此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
脚本有什么问题,我如何纠正它?
7条答案
按热度按时间yvt65v4c1#
试试看
没有任何
您实际上是将
;
指定为DELIMITER
命令的参数,因此没有空格可能会使它混淆。pinkon5k2#
在'DELIMITER'和'之间需要一个空格;”
s4n0splo3#
作为一个附加组件,对于其他人:
分隔符是使整个定义能够作为单个语句传递到服务器所必需的。
erhoui1w4#
试试下面的。
我相信它应该解决的目的。
从上面我们使用一个定义符。它应该以
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
`
``
bvuwiixz6#
我也有类似的问题。我从运行5.0.51的Debian Lenny执行mysqldump,并尝试导入到运行5.0的OpenMP,得到相同的错误。而我,却有一种执着。
版本冲突?
wfypjpf47#
DELIMITER // CREATE TRIGGER age_verified BEFORE INSERT ON customers FOR EACH ROW IF new.age<0 THEN SET new.age=0 END IF;//