2012-10-06 64 views
33

我有一個表中有兩個int值是ID。在他們自己這些ID可以在表中顯示任何次數,但他們在一起應該只出現一次。MySQL - 使一對值唯一

有沒有辦法使一對值獨一無二,並且仍然允許多次顯示各個值?

作爲後續,如果這是可能的,那麼這對值可以用作關鍵嗎?我目前有第三列爲我的密鑰的唯一自動增量值。

+0

什麼是你的意圖這裏?爲了保持組合的獨特性,還是需要使用兩者來標識行? –

回答

50

這就是所謂的複合鍵。

如果你想你的實際PK更改爲複合之一,使用

Alter table <your table> drop PRIMARY KEY; 
Alter table <your table> drop COLUMN <your autoincremented column>; 

Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>); 

你也可以添加一個唯一約束(你的PK將是相同的,獨特的雙...將不得不是獨一無二的)。個人而言,我會推薦第二種解決方案(簡單PK +唯一約束),但這只是個人觀點。你可以谷歌搜索關於複合鍵的優點和缺點。

[]之間的部分是可選的。

編輯

如果你想做到這一點在創建表語句

對於複合PK

CREATE TABLE Test(
     id1 int NOT NULL, 
     id2 int NOT NULL, 
     id3 int NOT NULL, 
     PRIMARY KEY (id1, id2) 
    ); 

對於唯一索引

CREATE TABLE Test1(
     id1 int NOT NULL AUTO_INCREMENT, 
     id2 int NOT NULL, 
     id3 int NOT NULL, 
     PRIMARY KEY (id1), 
     UNIQUE KEY (id2, id3) 
    ); 
+3

+1時,我發現你需要'DROP KEY'來指定組合鍵,這可以幫助像我這樣的人瞭解這個新功能 –

+0

你還添加了一個例子,這是如何在'CREATE TABLE'語句中完成的? –

+0

@TomášZato見編輯。 –

0

添加primary key (col1, col2)您創建表定義

7

試試這個:ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

+0

我以爲是'*更好的方法*'; mysql至少會阻止這種意圖並將其轉換爲'UNIQUE KEY' ... ...與之相同:'ALTER TABLE面板ADD UNIQUE KEY name_label_UNIQUE(name,label);'。另外,當你添加:'CONSTRAINT ... UNIQUE' * ho hum * – will