MySQL-Are;“不为空”;主键需要约束吗?

MySQL-Are;“不为空”;主键需要约束吗?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,是否需要为MySQL数据库中的主键声明“NOTNULL”约束?主键不能有空值,因为它会自动递增并自动填充字段记录。那么,我这样说是否正确?这意味着我可以删除主键的“notnull”约束?(因为您已经在mysql中标记了您的问题mysql),您不必显式地这样做。发件人: 主键是唯一的索引,其中所有键列必须定义为非空。如果它们没有显式地声明为notnull,MySQL就会隐式地(无声地)声明它们 当然,不必这样做并不意味着为了清楚起见,你可能不想这样做。是和否 您可以删除“notnull”,但这不会

是否需要为MySQL数据库中的主键声明“NOTNULL”约束?主键不能有空值,因为它会自动递增并自动填充字段记录。那么,我这样说是否正确?这意味着我可以删除主键的“notnull”约束?

(因为您已经在mysql中标记了您的问题
mysql
),您不必显式地这样做。发件人:

主键
是唯一的索引,其中所有键列必须定义为
非空
。如果它们没有显式地声明为
notnull
,MySQL就会隐式地(无声地)声明它们

当然,不必这样做并不意味着为了清楚起见,你可能不想这样做。

是和否
您可以删除“notnull”,但这不会删除约束。就我个人而言,我会把它们放在里面,但把它们拿出来并没有任何价值。

主键不能包含可为空的列
auto_increment
不是检查约束(而是默认约束),因此无论是否存在
auto_increment
,都不能从作为主键一部分的列的定义中删除
not null
。在mysql中为主键创建表时,不必键入
notnull
,因为引擎会自动添加此约束

我们不需要显式地将该列声明为NOTNULL,因为主键约束使该列不为null。我已经在Oracle中进行了检查。

将它们放在列上不会有什么坏处,并且在读取表定义时会使事情变得明确。如果将来更改主键约束,仍然会有
notnull
约束。您确实有两个不应该有的概念交织在一起。主键不必是自动递增列,也不必(如果表有)自动递增列是主键。仅仅因为它们倾向于一起使用并不意味着它们是同一件事。它不仅将PK列声明为
notnull
,而且如果它们被声明为
NULL
,它甚至会将它们重写/修改为
notnull
。不,你不能。如果列是主键的一部分,则不能将NOTNULL约束更改为Null。@ypercube他没有说“更改为Null”,而是说“删除NOTNULL”。仅仅因为NOTNULL不在DDL文本中并不意味着它不生效。@Branko:如果他的意思是“从定义中删除措辞”NOTNULL“,是的,我同意。再次阅读,你是对的,这可能就是我的意思。因此,是的,我要说的是,我不需要为主键键入NOTNULL,因为NOTNULL已经由MySQL添加,所以-
id
int(11)NOTNULL自动递增,变成
id
int(11)自动递增,不可能。不管怎么说,我的意思是这不是一个很大的努力,是吗。然后,如果您想使用其他dbms,或者更改主键,那么您就没有doh时刻了。我讨厌简洁作为一种语言选择,对于那些太聪明而不能在现实世界中工作的人来说,他们下一步会把它缩写为nN。。。。