为什么 MySQL NOT NULL 不应该添加到主键字段?
mysqlmysqli database
您不需要将 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)