我创建了一个基本触发器,用于检查插入到行中的新值是否大于或等于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的值。
我不知道为什么会这样。
答案 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
约束,而不要使用触发器!