在 * 主键 * 字段中添加NOT NULL
有什么意义?主键已经是 * 非空 * + * 唯一 *。
下面是一个例子:
CREATE TABLE student (
id int(11) AUTO_INCREMENT NOT NULL,
name varchar(255),
PRIMARY KEY(id)
)
为什么不这样定义呢?
CREATE TABLE student (
id int(11) AUTO_INCREMENT,
name varchar(255),
PRIMARY KEY(id)
)
4条答案
按热度按时间shyt4zoc1#
相同,主键 * 自动 * 得到
NOT NULL
。eblbsuwk2#
你会问,为什么人们要在不必要的时候添加NOT NULL呢?我想,只是因为它是一种很好的风格。并且使它对读者来说很明确。
js81xvg63#
NULL
不等同于NULL
(因为NULL
表示未知或不存在的值),因此允许多个记录的id为NULL
,即使定义了主键/唯一约束,也要使用NOT NULL
,前提是MySql允许在可空字段上定义主键。此外,由于主键通常用于其他表的外键,因此具有一个或多个
NULL
值没有意义。rt4zxlrg4#
如果声明
PRIMARY KEY
时不带NOT NULL
,则NOT NULL
将隐式添加到PRIMARY KEY
,因此PRIMARY KEY
带或不带NOT NULL
都是相同的。The MySQL documentation表示如下:
一种唯一索引,其中所有键列都必须定义为NOT NULL。如果没有显式声明为NOT NULL,MySQL将隐式(静默)声明它们。一个表只能有一个PRIMARY KEY。PRIMARY KEY的名称始终为PRIMARY,因此不能用作任何其他类型索引的名称。
同样,the MySQL documentation表示如下:
表的主键表示在最重要的查询中使用的列或列集。它具有关联索引,以提高查询性能。查询性能受益于NOT NULL优化,因为它不能包含任何NULL值。...