2011-02-09 9 views
1

MySQLのUNIQUE制約が列単位で表示されるように見えますが、行単位で行が一意であることを確認する方法を探しています。答えを推測することは、UNIQUEにする行ごとに連結することによってハッシュを作成することですが、その行のハッシュを格納する列には一意です。また、行のIDはSURROGATE_KEYなので、コントロールを作成しない限り、行自体は常にUNIQUEになります。これは、最後の行の整数のIDの+1だけ増加する整数の連続であることを意味します。MySQLでは、行にUNIQUE制約を設定できますか?

+2

多数のフィールドがある場合はパフォーマンスが低下しますが、すべてのフィールドがリストされた一意のキーを追加するだけで済みます。 IDフィールドを除外しなければならないのは、それがあなたが望む一意性を破るからです。 –

+1

私は質問を理解しているか分からない - 一意の列を使わずに行が一意であることを確認したいのですか?しかし、プライマリキーの存在のためにテーブルのすべての行が一意ではありませんか? – ryebr3ad

+0

@ ryebr3ad:主キーが一意であるのは、そのキーが自然の場合にのみ機能し、そうでない場合には、人工生成の順次整数です。 – blunders

答えて

4

複数列のUNIQUEインデックスを作成することができます。

+0

複数列のUNIQUEは、複数列のUNIQUEであり、列のコンボのUNIQUEではなく、UNIQUEと同じように見えます。それは間違っていますか? – blunders

+0

が間違っていますか?どのような意味で? '(col1、col2)'にUNIQUE索引を作成すると、これらの列の両方に正確に同じ値を持つ2つの行はありません。 – Mchl

3

行を確実にするための主な方法は、すべての列に対してUNIQUE制約を使用するか、すべての列に類似のUNIQUEインデックスを作成することです。 2つの列に同じ入力を受け入れることができるが、それらを一意に区別する必要がある場合は、主キー(基本的にはID列)以上のものは必要ありません。もう1つの方法は、InfiniDB(MySQLフロントエンドを持つ)やMonetDB(どちらもオープンソースの代替)などの列ストアデータベースに切り替えることです。

+0

プライマリキーはUNIQUEです。これは人為的に生成されたシーケンシャル整数です。 – blunders

関連する問題