为什么不应该在 MySQL 的主键字段中添加 NOT NULL?


您不需要在主键字段中添加 NOT NULL,因为它会自动获得 NOT NULL。主键是 NOT NULL 和唯一键的组合。

以下是主键字段的演示。让我们先创建一个表。创建表的查询如下所示

mysql> create table NotNullAddDemo
   -> (
   -> Id int AUTO_INCREMENT,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.81 sec)

在上面的表中,您不需要在主键字段中添加 NOT NULL,因为 MySQL 会在内部将其转换为 NOT NULL。要检查它是否正确,请使用以下语法。

DESC yourTableName;

现在让我们检查上述语法以获取表描述

mysql> desc NotNullAddDemo;

以下是输出

+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| Id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.07 sec)

查看“Null”列,有一个值为“NO”,这意味着没有 NULL 值。

要检查 NOT NULL,让我们在表中插入一些 NULL 记录。这将允许 NULL 值,但每次它都会从 1 开始计数。在表中插入记录的查询。

mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.45 sec)

在为主键插入两个 NULL 值后,如果您尝试插入值 1,则会生成错误。这是因为 MySQL 将第一个 NULL 值计为 1,第二个 NULL 值计为 2,依此类推。

如果您现在尝试插入 1,则错误如下所示

mysql> insert into NotNullAddDemo values(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

如果您插入值 3,则它将被接受

mysql> insert into NotNullAddDemo values(3);
Query OK, 1 row affected (0.21 sec)
mysql> insert into NotNullAddDemo values(NULL);
Query OK, 1 row affected (0.18 sec)

使用 select 语句显示表中的所有记录。查询如下所示

mysql> select *from NotNullAddDemo;

以下是输出

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

更新于: 2019-07-30

711 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告