2015-11-12 87 views
0

如何在MySQL中創建一個約束表,該表只適用於您希望1字段對於每個唯一記錄唯一的1個特定表?MySQL對於唯一值的約束

例如,讓我們說,我有一個名爲 「人」 具有以下字段的表:

  1. person_social_security(主鍵)
  2. PERSON_ID
  3. PERSON_NAME
  4. person_phone_extension

對於每條記錄,我想確保字段#3(person_phone _extension)對於每個person_id也總是唯一的。換句話說,person_id不應該有重複person_phone_extension。然而,不同的person_id可以具有相同的person_phone_extension作爲另一個person_id。在此表中可以有person_id的多個實例。用我的小提琴,你可以看到,如果你取消註釋我最後的查詢,將帶來MySQL錯誤有關重複值

create table person (
person_id int auto_increment primary key, 
person_name varchar(50), 
person_phone_extension int unique key); 

+0

如果'person_id'不是唯一不能是'主要key' – Alex

+0

真。更改了示例以糾正該錯誤。 –

+0

如果我瞭解你,你可以擁有多個具有相同person_id的記錄,那麼該列代表什麼? –

回答

2

http://sqlfiddle.com/#!9/df732/2

剛剛成立UNIQUE KEY對你的專欄。

UPDATE根據您的新評論person_id不是主鍵,也不是唯一的。但是應該檢查person_id + person_phone_extension的組合。所以,你需要設置一個鍵對那些2列,如:

http://sqlfiddle.com/#!9/51547/1

create table person (
person_id int, 
person_name varchar(50), 
person_phone_extension int, 
unique key idx (person_id,person_phone_extension)); 
+0

這個SQL小提琴網站測試的東西真棒! 雖然這不是我所期待的。每個person_id不能有重複的person_phone_extension,但不同的person_id可以具有相同的person_phone_extension。我會編輯我的原始問題,以便更清楚一點。 –