在MySQL中为主键字段添加NOT NULL有什么意义?

xmq68pz9  于 2022-12-17  发布在  Mysql
关注(0)|答案(4)|浏览(157)

在 * 主键 * 字段中添加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)
)
shyt4zoc

shyt4zoc1#

相同,主键 * 自动 * 得到NOT NULL

eblbsuwk

eblbsuwk2#

你会问,为什么人们要在不必要的时候添加NOT NULL呢?我想,只是因为它是一种很好的风格。并且使它对读者来说很明确。

js81xvg6

js81xvg63#

NULL不等同于NULL(因为NULL表示未知或不存在的值),因此允许多个记录的id为NULL,即使定义了主键/唯一约束,也要使用NOT NULL,前提是MySql允许在可空字段上定义主键。
此外,由于主键通常用于其他表的外键,因此具有一个或多个NULL值没有意义。

rt4zxlrg

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值。...

相关问题