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

问题描述 投票:1回答:2

我创建了一个基本的触发器来检查插入到行中的新值是否大于或等于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的值。

我不知道为什么会这样。

mysql sql mysql-workbench
2个回答
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 ;

0
投票

您编写的触发器将根据以下内容执行插入:

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

您必须在其中添加check约束,而不是触发器!

© www.soinside.com 2019 - 2024. All rights reserved.