【问题标题】:MySQL DELIMITER syntax errorsMySQL DELIMITER 语法错误
【发布时间】:2009-07-09 06:16:47
【问题描述】:

这个 MySQL 脚本安装了多个触发器。

它可以在一台运行 MySQL 5.0.51b-community 的机器上运行。在另一台运行 MySQL 14.12 Distrib 5.0.45 的机器上,对于 redhat-linux-gnu (i386),它失败了,并显示此错误消息,这似乎与 DELIMITER // ... // DELIMITER 相关;语法:

第 272 行出现错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'DELIMITER; 附近使用的正确语法;如果存在触发器名称,则删除触发器;第 1 行的 DELIMITER'

脚本语法(总结)是:

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

脚本有什么问题,我该如何纠正?

【问题讨论】:

    标签: sql mysql triggers delimiter


    【解决方案1】:

    试试

    DELIMITER ;
    

    不是

    DELIMITER;
    

    您实际上是在将; 指定为DELIMITER 命令的参数,因此没有空格可能会造成混淆。

    【讨论】:

      【解决方案2】:

      'DELIMITER' 和 ';' 之间需要一个空格

      DELIMITER ;
      # not:
      DELIMITER;
      

      【讨论】:

        【解决方案3】:

        作为附加组件,供其他人使用:

        需要分隔符才能将整个定义作为单个语句传递给服务器。

        【讨论】:

          【解决方案4】:

          试试下面的。

          我相信它应该可以解决目的。

          DELIMITER +
          CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
          FOR EACH ROW BEGIN 
          INSERT INTO STUDENT_AUDIT 
          SET STUDENT_ID = NEW.STUDENT_ID, 
          MAC_ADDRESS = NEW.MAC_ADDRESS,
          IPADDRESS = NEW.IPADDRESS, 
          EMAIL_ID = NEW.EMAIL_ID , 
          START_TIME=NEW.START_TIME, 
          END_TIME=NEW.END_TIME, 
          STATUS=NEW.STATUS; 
          END; +
          

          从上面我们使用DELIMITER时。它应该是

          的形式
          DELIMITER +
          --
          BLOCK OF SQL WHATEVER YOU WANT TO MENTION
          --
          +
          

          【讨论】:

            【解决方案5】:

            在MySql的版本中我使用delimiter命令时出现同样的错误,但是这个版本处理了分隔符“;”对于语句和分隔符“|”对于存储过程和函数,我认为可以解决问题;试试这个:

            DROP TRIGGER IF EXISTS trigger_name;

            CREATE TRIGGER trigger_name BEFORE UPDATE ON table 每一行开始 -- 触发逻辑在这里 结束|

            -- 此处的其他语句或函数

            【讨论】:

            • 那会是什么版本?
            【解决方案6】:

            嗯,我也有类似的问题。我从运行 5.0.51 的 Debian Lenny 执行 mysqldump 并尝试导入到运行 5.0 的 OpenSolaris 并得到相同的错误。我有 DELIMITER ;

            版本冲突?

            【讨论】:

            • 对我们来说似乎和版本有关,一个版本不带分号,另一个只带分号,另一个需要分号且没有空格。
            猜你喜欢
            • 2013-12-17
            • 2013-11-15
            • 2019-01-24
            • 2019-04-26
            • 1970-01-01
            • 2017-01-15
            • 1970-01-01
            • 1970-01-01
            • 2010-12-04
            相关资源
            最近更新 更多