【问题标题】:Mysql trigger creation bad syntaxMysql 触发器创建语法错误
【发布时间】:2020-09-23 09:18:06
【问题描述】:

我正在尝试创建 SQL 触发器,但我总是收到一条错误消息,我想检查 updateinsert 操作是否名为 status不高于1且不低于0。

CREATE TRIGGER tr_ins_cert_login 
BEFORE UPDATE ON cert_login 
FOR EACH ROW
BEGIN
    DECLARE errorMessage VARCHAR(255);
    SET errorMessage('Invalid Status Value.');
    
    IF new.status <> 0 AND new.status <> 1 THEN
        SET MESSAGE_TEXT = errorMessage;
    END IF;
END   

当我尝试运行命令时,它返回错误。 我正在使用 MySql。

错误: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5

有什么提示吗?

【问题讨论】:

  • 编辑过的帖子,对不起,不高于1也不低于0,我的错。发布错误@Akina
  • 你在设置分隔符吗?你用的是什么ide?​​span>
  • SET 语句语法与使用的不同。必须是SET errorMessage := 'Invalid Status Value.';不大于 1 且不小于 0 整数列是new.status IN (0, 1),非整数列是new.status BETWEEN 0 AND 1当我尝试运行命令时,它返回错误。 显示完整的错误消息文本。
  • MESSAGE_TEXT 本身是无效的,它的信号声明部分见dev.mysql.com/doc/refman/8.0/en/signal.html
  • @P.Salmon 我看到了文档并添加了一个 SIGNAL SQLSTATE,但错误仍然存​​在。

标签: mysql triggers sql-update sql-insert


【解决方案1】:

Message_text 应该是信号 sqlstate 的一部分,遵循我的盒子上的语法

drop trigger if exists t;
delimiter $$

CREATE TRIGGER t 
BEFORE UPDATE ON cert_login 
FOR EACH ROW
BEGIN
    DECLARE errorMessage VARCHAR(255);
    SET errorMessage = ('Invalid Status Value.');
    
    IF new.status <> 0 AND new.status <> 1 THEN
       SIGNAL SQLSTATE '01000'
        SET MESSAGE_TEXT = errorMessage;
    END IF;
END   $$

delimiter ;

https://www.db-fiddle.com/f/913nweKrHqXL5SViuuqAZE/0

ps 你的第一个 set 声明无效你错过了 =

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多