2011-05-12 111 views
1

我遇到了MySQL獨特的痕跡問題。我想要做的是有這樣的事情:多個唯一的列,但只有唯一的組合

 
user_id group_id 
1  1 
1  2 
1  3 
2  1 
2  4 

在哪裏可以有相同的用戶ID的多個實例,以及組ID的多個實例,但只有允許兩個獨特的組合。我使用這個與ON DUPLICATE KEY UPDATE MySQL查詢,我想知道我需要做什麼對錶上的索引。目前,我有這個:

 
PRIMARY id 
UNIQUE user_id, group_id 

但是...... a)這是否足夠,b)我是否正確地獲得我要找的東西?

感謝所有幫助

詹姆斯

+0

您的示例表中沒有'id'字段?否則,第二個'UNIQUE'鍵將按照你想要的來完成。多個user_id,多個group_ids,但只允許表中任何特定的userid + groupid中的一個。 – 2011-05-12 21:09:34

+0

是的,有一個ID列。我只是爲了簡潔而離開它:-) – Bojangles 2011-05-12 21:13:06

回答

3

你幾乎得到了它。如果你使用MyISAM引擎,你可以這樣做:

CREATE TABLE your_table(
id int unsigned not null auto_increment, 
group_id int unsigned, 
primary key(group_id, id) 
) ENGINE = MyISAM; 

試試看的行爲,它會遞增ID您在您的示例中指定的方式,你就會有唯一約束了。

+0

太簡單了!非常感謝。我應該只是嘗試試驗和錯誤,而不是發佈,但嘿,它的工作原理! +1併爲您提供正確的答案。 – Bojangles 2011-05-12 21:11:30

+0

嘿,事情是 - 有關這方面的信息不是很容易「googleable」,並且它只是支持它的MyISAM引擎(InnoDB不會這樣做,例如,無論您如何指定首要的關鍵)。我很高興我能幫忙,歡呼:) – 2011-05-12 21:14:22