我有一个非常简单的触发器。我用 Toad for mysql 工具创建它并部署它,它的工作完美没有任何问题。当我把它交给管理员部署到生产服务器时,他们会收到错误。
Phpmyadmin错误:
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法
在第4行附近
Mysql控制台错误:
错误1064(42000):您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 在第1行'END'附近使用的语法
当被问到时,他们正在运行phpmyadmin的代码,他们还试图从mysql控制台运行,他们正在收到错误
为什么同样的东西是从GUI工具运行而不是从webtool或控制台工作,这真是令人沮丧和恼人。来自三种不同工具的3种不同行为
然后我尝试了同样的事情,我也得到了错误。令我惊讶的是
DROP TRIGGER IF EXISTS TRG_ ;
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN
DECLARE X INTEGER;
SELECT COUNT(*) into X FROM users;
IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;
END;
有人可以告诉我我做错了什么吗?我不确定,但我猜它与分隔符关键字有关,我从未明白过这个目的。
答案 0 :(得分:1)
看看这个问题 - MySQL: How do I use delimiters in triggers?
创建源对象(如触发器)时应使用分隔符。 DELIMITER不是MySQL语句,它是一个控制台命令,许多MySQL客户端都支持此命令。您可以在MySQL控制台中尝试此代码 -
DROP TRIGGER IF EXISTS TRG_ ;
DELIMITER $$
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN
DECLARE X INTEGER;
SELECT COUNT(*) INTO X FROM users;
IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;
END$$
DELIMITER ;
据我所知,一些旧的phpmyadmin版本不支持分隔符。