【问题标题】:Error in your SQL syntax near 'DELIMITER''DELIMITER' 附近的 SQL 语法错误
【发布时间】:2017-01-15 03:22:31
【问题描述】:

我想为我的数据库创建一个触发器。代码是这样的:

DELIMITER ;

DROP TRIGGER  IF EXISTS `spi_financial_request_AINS`;

DELIMITER $$

CREATE
    DEFINER = CURRENT_USER 
    TRIGGER `spi_financial_request_AINS` AFTER INSERT ON   `spi_financial_request` 
    FOR EACH ROW BEGIN    
            DECLARE ev_id INT;       
                IF check_audit('spi_financial_request')=1 THEN  
              INSERT INTO spi_audit_event(table_name, record_id,event_type,user_id)
              VALUES('spi_financial_request',new.id,'INS',@user_id);
                  SELECT LAST_INSERT_ID() INTO ev_id;
INSERT INTO spi_audit_data(event_id,column_name,new_value)VALUES(ev_id,'id',new.id);
INSERT INTO spi_audit_data(event_id,column_name,new_value)VALUES(ev_id,'request_id',new.request_id);
INSERT INTO spi_audit_data(event_id,column_name,new_value)VALUES(ev_id,'payment_type_id',new.payment_type_id);
            END IF;
        END;
$$

DELIMITER ;

我已经在我的本地站点上执行了它(使用 SQLyog 和 5.6.29 版本的 MySQL)。它有效。

但是当我尝试在 DEV 服务器上使用它时(使用 PHPMyAdmin 和 5.6.32 版本的 MySQL),我得到了一个错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DELIMITER”附近使用正确的语法

我真的不明白这是怎么回事。

【问题讨论】:

  • 默认分隔符已经是; 在第一行尝试DELIMITER $$ 所以DROP TRIGGER.... 也可以使用
  • 您的触发器在我的系统上运行良好。尝试不要使用 DELIMITER 做任何事情,因为我听说它不与 PHPMyAdmin 一起使用

标签: mysql sql triggers syntax-error


【解决方案1】:

DELIMITER 是一个 Mysql 控制台命令,你不能在 phpmyadmin 中使用它。要在 phpmyadmin 中设置分隔符,see this other answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多