您好我正在使用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