2011-07-20 13 views
9

私は30列と数千のエントリを持つMySQLのテーブルを持っています。
すべての行をユニークにする方法はありますか?行がすでに存在する場合は、その行を再び入力できないようにする必要があります。MySQLの行全体をユニークにする方法はありますか

すべての列が個別に繰り返される可能性があるため、ここではプライマリキーまたはユニークキーは使用できません。
行を一意にしたい。例えば :-Thereがあるが、私は任意の一つまたは二つの列を一意にすることはできませんが、私はすべて同じデータを持つ2つのエントリを持つべきではありません。このコラムでは

columns->name,age,height,weight. 

を持つテーブルです。

+0

[ERROR 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 More:OPのように、PKまたはUKは一度に1つのカラムにしか適用できないと思う質問から、これは有効な答えだと思います。 –

+0

あなたは正しいです、@アンダーズ・アベル。だから、私は投票した。 –

2

あなたは、複数の列に一意のインデックスを作成することができます。すべての列をインデックスに入れるだけです。列が大きい場合は、索引の最大長の問題にぶつかることがありますが、最初に試してみてください。まだ確保しながら

17

あなたは、あなたのテーブル

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

あなたは目的に参加するためのユニークなAUTO INCREMENT主キーを維持することができます。この方法で、すべての列が含まれて一意のインデックスを作ることができ、データのすべてのもの、あなたのテーブルはユニークです。

+0

この問題は、インデックスに最大長があり、非常に長いインデックスが非効率的であることが原因です。 –

4

各列の個々の固有キーではなく、すべての列にUNIQUE keyを作成することができます。これは、値の組み合わせが固有のものであることを意味します。ただし、列にNULL値が許可されている場合、列にnullの値が含まれていると、別の行に同じ値が含まれていても一意であるとカウントされます。同じ値の場合はnullです。