在mysql中触发导致错误

Posted

技术标签:

【中文标题】在mysql中触发导致错误【英文标题】:Trigger in mysql causing error 【发布时间】:2017-03-29 21:24:53 【问题描述】:

以下代码中的错误是什么。我在mysql中执行

CREATE TRIGGER tg_order_insert
BEFORE INSERT 
    ON `order` FOR EACH ROW
BEGIN
    INSERT INTO `grocery`.`order_seqid` VALUE(NULL);
    SET NEW.order_id = CONCAT('#GNC', LPAD(LAST_INSERT_ID(),3,'0'));
END;

Grocery 是数据库,order_seqid 和 order 是 2 个表。 order_seqid 是一个只有 1 个属性的表,如果类型为 int 并自动递增。 我试图在我们插入订单表的 id 上加上一个前缀。 我在 INSERT INTO.....END; 行中遇到 2 个错误

【问题讨论】:

是的,错误。我也得到那些。重要的是您遇到的具体错误。 MySQL 不遗余力地确定问题的确切位置。 【参考方案1】:

您是否在触发器定义之前声明了分隔符?类似的东西

DELIMITER //
CREATE TRIGGER tg_order_insert
BEFORE INSERT 
    ON `order` FOR EACH ROW
BEGIN
    INSERT INTO `grocery`.`order_seqid` VALUE(NULL);
    SET NEW.order_id = CONCAT('#GNC', LPAD(LAST_INSERT_ID(),3,'0'));
END
//

因为如果你不这样做,那么当 MySQL 看到第一个 ; 并调用语法错误时,它会认为你正在尝试结束触发器定义。

【讨论】:

如果此答案解决了您的问题,请不要忘记接受并投票;)

以上是关于在mysql中触发导致错误的主要内容,如果未能解决你的问题,请参考以下文章

phpmyAdmin 中的 MySQL 触发器错误

引发错误在 MySQL 触发器中不起作用

我可以使用MySQL触发器更新刚添加的行吗?

MySql 触发语法错误 1064 空单引号

引发错误,防止 MySQL 触发器中的表更新

MySQL中的触发器语句错误