为啥 MySQL 在创建触发器时会出现此错误?

Posted

技术标签:

【中文标题】为啥 MySQL 在创建触发器时会出现此错误?【英文标题】:Why MySQL is giving this error while creating trigger?为什么 MySQL 在创建触发器时会出现此错误? 【发布时间】:2012-11-19 22:08:05 【问题描述】:

我已创建此触发器用于自动生成 SDA0001、SDA0002 等用户代码... 我刚刚包含了 BEGIN 和 END 之间的主要语句。它是在表 agent_mst

上创建 BEFORE INSERT
DECLARE max_id INT;

SET max_id=(SELECT MAX(agent_id_pk)+1 FROM `agent_mst`);
IF (max_id IS NULL) THEN
    SET max_id=1;
END IF;

SET 
NEW.date_added=NOW(), 
NEW.date_updated=NOW(),
NEW.agent_code = CONCAT('SDA', LPAD(max_id, 4,'0'));

它给出的错误如下

mysql 说:#1064 - 你的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'DECLARE max_id INT; 附近使用的语法; SET max_id=(选择 MAX(agent_id_pk)+1 FROM agent_mst); ' 在第 1 行

我正在使用 phpMyAdmin 创建这个触发器。

有什么建议吗? 提前致谢。

【问题讨论】:

【参考方案1】:

这应该可行:

DELIMITER $$

CREATE TRIGGER trigger_name BEFORE INSERT ON `agent_mst`
FOR EACH ROW 
BEGIN
    DECLARE max_id INT;

    SET max_id=(SELECT MAX(agent_id_pk)+1 FROM `agent_mst`);
    IF (max_id IS NULL) THEN
        SET max_id=1;
    END IF;

    SET NEW.date_added=NOW(),
        NEW.date_updated=NOW(),
        NEW.agent_code = CONCAT('SDA', LPAD(max_id, 4,'0'));

END $$

DELIMITER ;

【讨论】:

不。仍然是同样的错误。我正在使用 phpMyAdmin 创建触发器。这会造成什么麻烦吗? @aslamdoctor - 不知道。尝试了命令行或工作台。 是的,它从命令行工作。得学点新东西。每当从 phpmyadmin 创建触发器时,始终包含 BEGIN 和 END 语句,即使它自动包含这些语句。 @aslamdoctor - 我更喜欢在工作台上摆弄。然后我把 SQL 放到一个脚本中,只用命令行来做这件事。甚至创建一个脚本来创建数据库等。【参考方案2】:

在所有 pl/sql 函数的 mySQL 中,我们应该首先设置分隔符。因为它会将所有分号作为行尾。

【讨论】:

以上是关于为啥 MySQL 在创建触发器时会出现此错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我创建新项目时会在 android studio 中出现此错误?

为啥在使用 Python/C API 时会出现此段错误?

当列字段达到0时触发删除行?

mysql中的触发器出现错误

为啥使用 SingleAsync 时会出现此错误?

为啥在 raise_application_error 未执行之前的触发器内部代码?