如果检查失败,防止插入

问题描述 投票:0回答:1

当Check条件不为真时,我想阻止插入我的MySQL数据库。例如,在下面的MySQL查询中,我添加了一个检查约束,Gender只能是“M”或“F”,但仍然可以插入“T”。

CREATE TABLE STUDENT
(S_FIRST VARCHAR(10) NOT NULL, 
S_LAST VARCHAR(10) NOT NULL, 
GENDER VARCHAR(1) NOT NULL CHECK (GENDER="M" OR GENDER="F"), 
S_EMAIL VARCHAR(50) NOT NULL CHECK (S_EMAIL="%@%.COM"), 
S_PHONE VARCHAR(10) NOT NULL CHECK (S_PHONE<9999999999), 
DATE_OF_BIRTH DATE NOT NULL, 
S_ID INT(3) PRIMARY KEY AUTO_INCREMENT);


INSERT INTO STUDENT VALUE("ABNISH","NIRAJ","T","[email protected]","7062123799",'1996-10-19',NULL); 

-- the Second query should not work since the Gender is "T"
mysql
1个回答
0
投票

MySql Version 8中引入了检查约束。

替代方法是使用触发器

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
    IF NEW.GENDER NOT IN ('F', 'M') THEN
        SIGNAL SQLSTATE '12345'
            SET MESSAGE_TEXT := 'check constraint on GENDER failed';
    END IF;
END$$   
DELIMITER ;
© www.soinside.com 2019 - 2024. All rights reserved.