2012-01-20 40 views
2

MySQLテーブルに一意の列を作成できますが、実際には2つの列を比較しようとしています。複数列の重複エントリのチェックMySQL

だから私のようなレコードを持っていた場合:

Time   User  Table 
10:00pm  Fred  29 
11:00am  Bob  33 

を私はtime 10:00pmtable 33ではなく10:00pm table 29で新しいレコードを挿入することができます。

私はクエリを実行して、それらの2つのフィールドの比較に基づいてそのクエリの結果があった場合、新しいレコードを挿入する能力を失うことは知っていますが、もっと洗練されたソリューションがあればINSERTでMySQLから重複エントリエラーを取得し、数行のコードを保存します。

+2

あなたは、本質的に複数列制約を探しています: – cdeszaq

+1

2時間前にそれらの言葉を知りたいと思っています。私はそれをgoogled、このサイトでこの正確な結論に来た。少なくとも私のような、それを理解していない人は、今は一致するクエリを持つでしょう。 –

答えて

3

あなたは両方の列を組み込んだユニークなインデックスを作成することができます。 NULLの値を持つことで、独自のチェックが行われます。

また、変更したい列名にも予約済みのSQLキーワードを使用しています。

CREATE UNIQUE INDEX index_name ON table_name (column1, column2,...); 
+2

私のSQLキーワードは無実を保護するためにこの質問で変更されました。 –

3

は、両方の列間での複合ユニーク制約を使用してみてください:

ALTER TABLE your_table ADD UNIQUE(`Time`, `Table`); 

今すぐ一致する値を持って追加することを試みるすべての行は、あなたのアプリにするためにテストすることができ、エラーをスローするようにMySQLを強制します。これはNULLではありません両方の値を提供し、同じペアリングのための任意の挿入をブロックします

CREATE UNIQUE INDEX idx_time_and_table ON reservations (`Time`, `Table`); 

2

はあなたがユニークになりたい列に基づいて一意のインデックスを作成します。