2013-04-06 190 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請求犯規提供一個值,該字段不是自動增量並不能爲空:默認的調用,但你會得到一個錯誤,告訴你,這個領域的「不能爲空」

希望這有助於。

相關問題