CREATE TABLE中的日期语法CHECK约束

时间:2015-03-24 13:42:42

标签: mysql sql database sqlite phpmyadmin

我在SQLite中创建表并希望检查日期的语法。它应该是'YYYY-MM-DD'。当我将数据插入此表时,当我在插入日期时键入其他内容时,它会给我错误,例如插入成员(DoB)值('2013-120qw')。它应该只是例如'2013-12-04'。

这是我的表:

CREATE TABLE Member(
    email VARCHAR(100) NOT NULL,
    name VARCHAR(100) NOT NULL,
    DoB TEXT(10) NOT NULL CHECK (length(DoB) IN (10) AND date(DoB) BETWEEN date('1900-01-01') AND date(CURRENT_DATE)),
    telephone VARCHAR(11) NOT NULL CHECK (length(telephone) IN (11)),
    PRIMARY KEY (email)
);

2 个答案:

答案 0 :(得分:1)

问题是date()为无效的日期字符串返回NULL,而NULL不会使检查约束失败。

添加date()感到满意的单独检查:

...
DoB TEXT(10) NOT NULL CHECK (date(DoB) IS NOT NULL AND
                             length(DoB) = 10 AND
                             DoB BETWEEN '1900-01-01' AND CURRENT_DATE),
...

答案 1 :(得分:0)

我感谢DATE类型很有用,因为MySql没有约束

CREATE TABLE Member(
email VARCHAR(100) NOT NULL,
name VARCHAR(100) NOT NULL,
DoB date NOT NULL,
telephone VARCHAR(11) NOT NULL CHECK (length(telephone) IN (11)),
PRIMARY KEY (email)

);

如果您需要帮助,此链接将为您提供帮助 https://dev.mysql.com/doc/refman/5.0/en/datetime.html