我创建了一个基本的触发器来检查插入到行中的新值是否大于或等于1且小于或等于10,这仅用于测试资格,无论我在哪里插入新的测试资格例子0它将它添加到表中,但是我的触发器检查该值应该大于0并且不起作用
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的值。
我不知道为什么会这样。
您有两种选择:
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)如果1 <= value <= 10,则插入语句并触发插入 2)如果1> = value> = 10,则插入语句并触发不插入
您必须在其中添加check
约束,而不是触发器!