2011-07-20 25 views
9

我有一個MySQL列中有30列和數千個條目。
有沒有一種方法可以使每一行都是唯一的,這意味着如果一行已經存在,我不應該再次輸入該行。有沒有辦法使整個MySQL行獨一無二

我不能在這裏使用主鍵或唯一鍵,因爲每個列可能會重複。
我希望該行是唯一的。 例如: - 有與

columns->name,age,height,weight. 

表在本專欄中,我不能做任何一個或兩列獨一無二的,但我不應該有兩個條目與所有相同的數據。

+0

請記住[錯誤1071](http://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes/16820166#16820166 )結合這麼多列可能會產生問題。 – roundar

回答

10

您需要一個複合主鍵。

複合主鍵告訴MySQL你希望你的主鍵是字段的組合。

此處瞭解詳情: Why use multiple columns as primary keys (composite primary key)

+0

OP說她不能使用主鍵用於此目的 –

+1

@Raj更多:從問題看來,OP認爲PK或英國人一次只能申請一個專欄,所以我認爲這是一個有效的答案。 –

+0

你是對的,@安德斯亞伯。這就是我投票的原因。 –

2

你可以做一個唯一索引上多列。只需將所有列放在索引中。如果列很大,您可能會遇到索引最大長度的問題,但請先嚐試一下並查看。

17

您可以包括在你的餐桌

ALTER TABLE buyers ADD UNIQUE idx_row_unique(first_name,last_name,...); 

這樣你就可以保持爲加入目的的唯一AUTO INCREMENT主鍵中的所有列的唯一索引,同時還確保所有的數據在你的表是獨一無二的。

+0

問題在於索引具有最大長度,非常長的索引效率低下。 –

4

您可以在所有列上創建UNIQUE key,而不是在每列上創建單獨的唯一鍵。這意味着這些值的組合將是唯一的 - 正是您所需要的。但請注意,如果任何列允許空值,如果該列包含null值,則它將被計數爲唯一,即使另一行包含相同的值,其中null爲相同的值。

相關問題