失败:
CREATE TABLE IF NOT EXISTS `demo`(
`id` INT ,
`age` INT CONSTRAINT c1 CHECK(`age`>=18),
PRIMARY KEY(`id`)
);
成功:
CREATE TABLE IF NOT EXISTS `demo`(
`id` INT ,
`age` INT CHECK(`age`>=18),
PRIMARY KEY(`id`)
);
是我CONSTRAINT的用法有问题吗,
目前官网已经查不到5.5的文档了,最早的5.7版本文档中对check是这么描述的
The CHECK clause is parsed but ignored by all storage engines.
大概意思就是check语法可以被解析,但是会被忽略。这和你描述的现象一致。
在5.7版本中,是没有 "CONSTRAINT CHECK"语法的,所以更老的5.5估计也没有
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
create_definition: {
col_name column_definition
| {INDEX | KEY} [index_name] [index_type] (key_part,...)
[index_option] ...
| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
[index_name] [index_type] (key_part,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,...)
reference_definition
| CHECK (expr)
}
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
并且创建完后 查看表信息如下:
/*DDL 信息*/------------
CREATE TABLE `demo` (
`id` int(11) NOT NULL DEFAULT '0',
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
那个约束条件还是没有添加上,也就是说任然可以添加age < 18的数据,这是为什么呢?
数据库:MSYQL 5.5
图形化工具 SQLyog