您好我正在使用MySQL
TRIGGERS
,我正在使用MySQL 5.5.8,我有一个表。因为MySQL
不允许CHECK
约束,我用一个TRIGGER
来检查输入值是否是错误的,如果输入值是错误的,我试着给出一条消息并停止向表中插入记录。但它会忽略我的TRIGGER
,如果它包含无效数据,则向表中插入记录。使用触发器来停止插入不工作的表MySQL
表
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 ;
我要检查是否为出生日期输入的值小于4个字符,那么不插入记录,给出一个错误信息,但。
的DateOfBirth
值0
,所以我想它应该给一个错误,但你可以看到它正在执行忽略它。
是什么原因,我这样做是错误的,请帮助,在此先感谢。
UPDATE
插入语句确实表示警告,您是否尝试过“显示警告”? – 2013-03-21 04:48:39
在创建'trigger'的时候,我想你错过了错误的分号如果检查。 – Ranjith 2013-03-21 04:50:00
@ranjith,请告诉我如何做到这一点 – 2013-03-21 04:51:56