2010-06-12 55 views
1

我遇到了问题!在MySQL中使用检查限制来控制字符串长度

我已经使用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) 
); 

insert语句:

INSERT INTO user VALUES (null, 'user', 'Fname', 'Lname', '[email protected]'); 

在FNAME列中的字符串的长度应该是太短了,但它插入反正。

我很确定我在这里缺少一些基本的东西。

回答

7

MySQL doesn't enforce CHECK constraints, on any engine
这让我问,为什么你会声明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; 
+0

我想这是至少30个字符长(比真的,我只是把30短,使得这种情况下会失败) ,所以任何比这更长的字符串将被接受 – ptrn 2010-06-12 01:30:06

+1

甚至不能编译。 – zgnilec 2012-04-24 00:30:48