嗨,我正在使用MySQL
TRIGGERS
,我正在使用MySQL 5.5.8,我有一张桌子。由于MySQL
不允许CHECK
约束,我使用 aTRIGGER
检查输入值是否错误,如果输入值错误,我尝试给出消息并停止将记录插入表中。但TRIGGER
如果它包含无效数据,它会忽略我的记录插入到表中。
桌子
CREATE TABLE pupil_data
(
PupilID int(10) NOT NULL AUTO_INCREMENT,
PupilForeName varchar(255) NOT NULL,
PupilLastName varchar(255) NOT NULL,
Gender CHAR(1),
DateOfBirth DATE ,
PhoneNumber int(10) ,
FamilyID int(10) NOT NULL,
PRIMARY KEY (PupilID),
FOREIGN KEY (FamilyID) REFERENCES family_data(FamilyID)
ON DELETE CASCADE
ON UPDATE CASCADE
,
UNIQUE (PhoneNumber)
) ENGINE=innodb;
扳机
DELIMITER $$
CREATE TRIGGER `check_pupil_before_insert` BEFORE INSERT ON `pupil_data`
FOR EACH ROW BEGIN
IF CHAR_LENGTH( NEW.DateOfBirth ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on pupil_data.DateOfBirth failed'
END IF;
END$$
DELIMITER ;
我想检查为 DateOfBirth 输入的值是否小于 4 个字符,然后不要插入记录,但会给出错误消息。
的值DateOfBirth
是0
,所以我想它应该给出一个错误,但你可以看到它正在执行忽略它。
是什么原因,我做错了,请帮助,提前谢谢。
更新