2014-12-09 52 views
0

我試圖在表中添加主鍵並將其設置爲具有默認值並且不爲空的列並且不是唯一的.MySQL將該列接受爲主鍵......我想知道這是錯誤的,因爲如果用戶輸入2個記錄具有默認值,他將無法做到這一點..這是一個問題,其中SQL應該檢查列作爲非默認值或這是一個設計師最終問題,默認列不應該作爲主鍵。 。?向表中添加主鍵是否檢查默認列?

+0

甲'初級key'意味着所有的值應'unique'和'未null'。 – 2014-12-09 12:23:13

+0

此外,「主鍵」應明確標識表中的每條記錄。 – 2014-12-09 12:24:04

+0

如果用戶將主鍵添加爲具有默認值的列... SQL是否應該將它提示爲錯誤或不是? – 2014-12-09 12:28:00

回答

0

空:

每一個被室內用標記NULL列只是指定該列可以包含NULL值。該列仍可以有另一個默認值。

主鍵:

  • 一個PK始終被視爲唯一的,你不能有連續兩個相同的值
  • 只能有每個表中的一個PK,其主要的指數,這是非常快的時候在主列上查詢表格。
  • PK總是單列,不能像其他索引(唯一索引或常用索引)那樣分佈在多個列中。
  • 一個PK列不能接受NULL值

樣品:

ID (INT, PK) | Name (varchar) 
1   | Foo   ->Valid 
2   | Bar   ->Valid 
2   | FooBar   ->Invalid (Duplicate Primary key value ID) 

結論:是的MySQL應該和將在第二次嘗試把一個默認值拋出一個錯誤,因爲它的簡單處理後唯一的,給定的默認值是const。當您的insert語句中沒有爲此列指定任何值時,MySQL服務器將嘗試插入默認值。

差不多指:用默認值的PrimaryKey的列是沒有意義的,除非你使用一個自動增加這是一個僞「默認值」每次嘗試插入一些時間,這是不同的。

我希望這回答您的問題

0

我不完全理解的問題。您已經聲明一欄,是具有這些特徵的主鍵:

  • NOT NULL
  • 默認值

主鍵強加這些特點:

  • NOT NULL
  • 獨特

這些特徵並不相互矛盾。唯一的問題是默認值只能在列中分配一次。第二次嘗試插入具有默認值的行時,將會違反唯一性約束。

換句話說,MySQL的(我認爲其他數據庫一樣)讓你聲明這個即使看起來是一個好主意,它不會。

+0

我試圖複製更多,發現如果只有一個默認的列記錄存在,那麼SQL不會顯示錯誤,並接受該列作爲更新的主鍵....但如果存在多個記錄SQL將提示錯誤,像任何其他約束違反 – 2014-12-09 12:56:07

+0

@AmanVerma。 。 。這是這種聲明的正確行爲。 – 2014-12-09 13:27:21