Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql阻止插入,但不满足插入触发器条件_Mysql - Fatal编程技术网

Mysql阻止插入,但不满足插入触发器条件

Mysql阻止插入,但不满足插入触发器条件,mysql,Mysql,我正在尝试设置触发器,以便在不满足条件时不会发生插入 我认为下面的方法是这样做的,但我不确定 我犯了一个错误 /*SQL错误(1407):错误的SQL状态:“45000”*/ 有人能告诉我为什么会出现这个错误,如果mysql中不满足这个条件,那么最好的防止插入的方法是什么吗 DELIMITER $$ SHOW WARNINGS$$ USE `warrington_central`$$ CREATE TRIGGER before_insert_image_comment_section_che

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

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

我犯了一个错误 /*SQL错误(1407):错误的SQL状态:“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$$

SQLSTATE必须是5个字符的字符串,除非之前使用声明


您试图将SQLSTATE设置为6个字符长的“45000”(注意空格)。固定间距,您不应再次看到消息(它也反映在错误消息中,但空格有点难以看到)

SQLSTATE要求为5个字符的字符串,除非之前声明使用


您试图将SQLSTATE设置为6个字符长的“45000”(注意空格)。固定间距,您将不会再次看到消息(它也反映在错误消息中,但空格有点难以看到)

感谢SIGNAL SQLSTATE“45000”设置消息的什么\u TEXT=error\u msg;实际上是这样做的-这会阻止插入吗-只要在线阅读它,45000有什么作用mean@MatthewChambers信号是从触发器“返回”错误的方式,“45000”表示“未处理的用户定义异常”。这是错误代码。消息文本是错误消息的可选明文版本。是的,它应该阻止插入的发生。感谢什么信号SQLSTATE'45000'设置消息\u TEXT=error\u msg;实际上是这样做的-这会阻止插入吗-只要在线阅读它,45000有什么作用mean@MatthewChambers信号是从触发器“返回”错误的方式,“45000”表示“未处理的用户定义异常”。这是错误代码。消息文本是错误消息的可选明文版本。是的,它应该阻止插入发生。
SIGNAL SQLSTATE '45000 'SET MESSAGE_TEXT = error_msg;