ptr*_*trn 2 mysql check-constraints
我遇到了问题!
我已经使用MySQL设置了我的第一个检查约束,但不幸的是我遇到了问题.插入应该使测试失败的行时,无论如何都要插入行.
结构:
CREATE TABLE user (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
uname VARCHAR(10) NOT NULL,
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
mail VARCHAR(50) NOT NULL,
PRIMARY KEY (id),
CHECK (LENGTH(fname) > 30)
);
Run Code Online (Sandbox Code Playgroud)
插入声明:
INSERT INTO user VALUES (null, 'user', 'Fname', 'Lname', 'mail@me.now');
Run Code Online (Sandbox Code Playgroud)
fname列中字符串的长度应该太短,但无论如何都要插入.
我很确定我错过了一些基本的东西.
MySQL 不会在任何引擎上强制执行CHECK约束.
这导致我问,为什么你会将fname列声明为VARCHAR(50),但是想强制它只能是30个字符?
也就是说,唯一的选择是使用触发器:
CREATE TRIGGER t1 BEFORE INSERT ON user
FOR EACH ROW BEGIN
DECLARE numLength INT;
SET numLength = (SELECT LENGTH(NEW.fname));
IF (numLength > 30) THEN
SET NEW.col = 1/0;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)