主键默认为NULL吗?为什么这样描述?

时间:2013-04-06 11:49:46

标签: mysql sql database primary-key

我有一张表格,当我describe时:

mysql> DESC my_table;  
+------------+-------------+------+-----+---------+----------------+  
| Field      | Type        | Null | Key | Default | Extra          |  
+------------+-------------+------+-----+---------+----------------+  
| contact_id | int(11)     | NO   | PRI | NULL    | auto_increment |  
| location   | varchar(20) | YES  |     | NULL    |                |  
| city       | varchar(20) | YES  |     | NULL    |                |  
| state      | varchar(2)  | YES  |     | NULL    |                |  
+------------+-------------+------+-----+---------+----------------+  
4 rows in set (0.01 sec)  

我的问题是:为什么主键contact_id Default显示为NULL
我为列创建了NOT NULL的表格,而Primary Key无论如何都不能NULL
Null NODefault如何成为NULL

4 个答案:

答案 0 :(得分:4)

它不能为空的事实使得“默认”列的内容无关紧要。他们在'默认'列中使用'null',否则他们需要另一个魔术值来表示'无关','未使用',结束。

不要担心。

答案 1 :(得分:2)

MySQL中的

NOT NULL用于表示该字段不能为空。在您的情况下,主键字段contact_id在属性Null中正确显示为“否”。数据类型规范中的Default子句指示列的默认值。您的主键字段contact_id没有任何默认值。所以它显示为NULL

答案 2 :(得分:0)

请放心,即使默认列显示主键字段的(NULL)值,也无关紧要。当Default有这个(NULL)值时,让我们列出每个案例:

  • 如果您的SQL请求为主要字段提供值:默认不被调用

  • 如果您的SQL请求不提供值但是是自动增量字段:不调用Defaut

  • 如果您的SQL请求没有提供值且该字段不是自动增量并且可以为null:调用默认值并插入NULL

  • 如果您的SQL请求没有提供值且该字段不是自动增量且不能为空:默认被调用但是您收到错误,告诉您此字段“不能为空“

希望这有帮助。

答案 3 :(得分:0)

在您的情况下,默认列中的NULL表示用户未将任何值指定为默认值。