为什么不应该将MySQL NOT NULL添加到主键字段?
您不需要将NOTNULL添加到主键字段,因为它会自动获取NOTNULL。主键是NOTNULL和唯一键的组合。
这是主键字段的演示。让我们首先创建一个表。创建表的查询如下:
mysql> create table NotNullAddDemo -> ( -> Id int AUTO_INCREMENT, -> PRIMARY KEY(Id) -> );
在上表中,您不需要在主键字段中添加NOTNULL,因为MySQL在内部将其转换为NOTNULL。要检查它是否正确,请使用以下语法。
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值。
为了检查NOTNULL,让我们在表中插入一些NULL记录。这将允许使用NULL值,但是每次它都从1开始计数该值。查询将在表中插入记录。
mysql> insert into NotNullAddDemo values(NULL); mysql> insert into NotNullAddDemo values(NULL);
在为主键插入两个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); mysql> insert into NotNullAddDemo values(NULL);
使用select语句显示表中的所有记录。查询如下:
mysql> select *from NotNullAddDemo;
以下是输出:
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set (0.00 sec)