mysql从TOAD触发代码部署,但不是从phpmyadmin或mysql控制台部署

时间:2012-05-08 06:18:17

标签: mysql phpmyadmin mysql-management

我有一个非常简单的触发器。我用 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;

有人可以告诉我我做错了什么吗?我不确定,但我猜它与分隔符关键字有关,我从未明白过这个目的。

1 个答案:

答案 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版本不支持分隔符。