【问题标题】:Mysql Prevent insert with insert trigger condition not metMysql防止插入不满足插入触发条件
【发布时间】:2012-09-23 18:33:36
【问题描述】:

我正在尝试设置触发器,以便在不满足条件时不会发生插入。

我认为下面是这样做的方法,但我不确定

我收到一个错误 /* SQL 错误 (1407): Bad SQLSTATE: '45000' */

谁能告诉我为什么我会收到这个错误,以及如果在 mysql 中不满足条件,防止插入的最佳方法。

DELIMITER $$
SHOW WARNINGS$$
USE `warrington_central`$$ 

CREATE TRIGGER before_insert_image_comment_section_check
BEFORE INSERT ON image_comment FOR EACH ROW
BEGIN

 DECLARE error_msg varchar(255);
IF New.section != (SELECT id from section where section = "image")
    THEN SET    error_msg = "Cannot insert a comment into this section as it is the wrong section type";
    SIGNAL SQLSTATE '45000 'SET MESSAGE_TEXT = error_msg;


END IF;

END
$$

SHOW WARNINGS$$

【问题讨论】:

    标签: mysql


    【解决方案1】:

    SQLSTATE 必须是 5 个字符的字符串,除非之前使用 DECLARE ... CONDITION 声明过;

    SIGNAL SQLSTATE '45000 'SET MESSAGE_TEXT = error_msg;
    

    您正在尝试将 SQLSTATE 设置为 6 个字符长的 '45000 '(注意空格)。修正间距,您应该不会再看到该消息(它也反映在您的错误消息中,但是空格有点难以看到)

    【讨论】:

    • 感谢 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;实际上会 - 这会阻止插入 - 只需在线阅读它 45000 是什么意思
    • @MatthewChambers SIGNAL 是从触发器“返回”错误的方法,“45000”表示“未处理的用户定义异常”。这是错误代码。 MESSAGE_TEXT 是错误消息的可选明文版本。是的,它应该阻止插入发生。
    猜你喜欢
    • 2021-08-21
    • 2023-04-05
    • 2021-09-25
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2019-03-01
    相关资源
    最近更新 更多