0

我有一个非常简单的触发器。我从Toad for mysql工具创建它并部署它并且它的工作完美没有任何问题。当我把它交给管理员在生产服务器中部署时,他们遇到了错误。

phpmyadmin 错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用

在第 4 行的 '' 附近

Mysql 控制台报错:

ERROR 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;

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

4

1 回答 1

1

看看这个问题 - MySQL:如何在触发器中使用分隔符?

在创建触发器等源对象时,您应该使用分隔符。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 版本不支持分隔符。

于 2012-05-08T07:15:49.910 回答