2013-04-06 21 views
5

我有一个表,当我describe是:主键默认为NULL吗?它为什么被描述为这样?

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_idDefault显示为NULL
我创建了NOT NULL列的表,并且Primary Key无论如何都不能是NULL
Null如何能NODefaultNULL

+1

如果没有其他定义,'NULL'总是默认值。 – 2013-04-06 11:51:12

+0

@a_horse_with_no_name:我在创建时定义了“NOT NULL”。不知道你的意思 – Cratylus 2013-04-06 11:51:58

+0

那里的'NULL'意味着_没有default_,而是默认是'NULL'。所以如果没有指定'contact_id',mysql会检查默认值,即NULL,那么它会抛出一个错误,因为'contact_id'不能为'NULL'。 – 2013-04-06 11:53:43

回答

2

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

+0

因为它被定义为'PRIMARY KEY',所以它不能“理解”NULL不能作为特定列的默认值吗? – Cratylus 2013-04-06 11:59:56

4

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

别担心。

0

请放心,即使默认列显示主键字段的值为(NULL),也无所谓。让每一个案件清单时,默认有这个(NULL)值:

  • 如果你的SQL请求提供价值的主要领域:默认不叫

  • 如果你的SQL请求犯规提供一个值,但是一个自动增量字段:Defaut不叫

  • 如果你的SQL请求犯规提供一个值,该字段不是自动增量,可以为空:默认被调用,则插入NULL

  • 如果您的SQL请求犯规提供一个值,该字段不是自动增量并不能为空:默认的调用,但你会得到一个错误,告诉你,这个领域的“不能为空”

希望这有助于。

相关问题