MYSQL Workbench-触发器不检查我的插入

时间:2019-04-11 18:49:30

标签: mysql sql mysql-workbench

我创建了一个基本触发器,用于检查插入到行中的新值是否大于或等于1且小于或等于10,这仅用于测试资格,问题是无论我在哪里插入新值测试资格,例如0,它将其加到表中,但是我的触发器检查该值应大于0且不起作用

触发器,检查资格是否大于或等于1或小于或等于10

delimiter //
CREATE TRIGGER checkQlfy BEFORE
INSERT ON qualify
FOR EACH ROW
BEGIN
IF new.qualify_pp >= 1 and new.qualify_pp <= 10 THEN  
INSERT INTO qualify(qualify_pp) VALUES (new.qualify_pp);
END IF;
END//

delimiter ;

现在,此触发器已成功创建,但是无论我在哪里插入新值,都可以在此行说

INSERT INTO qualify(qualify_pp) VALUES(0);

它已插入表中,但我在触发器中说过应该添加大于或等于1的值。

我不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

您有两个选择:

  • qualify_pp字段上添加CHECK约束。仅适用于版本大于等于8.0.16(为什么使用here)。

  • 您无法更改触发触发器的插入操作。但是,如果验证失败,则可以引发错误,因此不会执行插入操作。

例如(请参阅IF中的验证如何更改):

delimiter //
CREATE TRIGGER checkQlfy BEFORE
INSERT ON qualify
FOR EACH ROW
BEGIN
IF new.qualify_pp < 1 OR new.qualify_pp > 10 THEN  
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Not allowed / some message';
END IF;
END//

delimiter ;

答案 1 :(得分:0)

您编写的触发器将基于以下条件进行插入:

1)插入语句,如果1 <= value <= 10
,则触发插入 2)如果1> = value> = 10

,则插入语句和触发器不会插入

您将不得不在其中添加check约束,而不要使用触发器!