【问题标题】:mysql trigger code deploying from TOAD but not from myphpadmin or from mysql console从 TOAD 但不是从 phpmyadmin 或从 mysql 控制台部署的 mysql 触发代码
【发布时间】:2012-05-08 06:18:17
【问题描述】:

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

Phpmyadmin 错误:

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

第4行的''附近

Mysql 控制台错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“END”附近使用的语法

当被问及时,他们正在从 phpmyadmin 运行代码,并且他们尝试从 mysql 控制台运行却遇到错误

这真的令人沮丧和恼火,为什么同样的事情是从 GUI 工具运行,而不是从 web 工具或控制台运行。三种不同工具的 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;

谁能告诉我我做错了什么?我不确定,但我猜它与 delimiter 关键字有关,我从不明白其目的。

【问题讨论】:

    标签: mysql phpmyadmin mysql-management


    【解决方案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 版本不支持分隔符。

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 2016-03-07
      • 2020-06-12
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多