web-dev-qa-db-ja.com

mysqlは一意のキーを組み合わせました

MySQLに2つの一意のキーを持ち、それらを何らかの方法で接続する方法はありますか?

たとえば、次のテーブルがあり、「title」と「store」が一意のキーである場合

id | category | title       | price | store
1  | outdoors | fishing rod | 59.99 | wal-mart
2  | auto     | Penzoil Oil | 9.99  | target

そして私は次のレコードを挿入しようとします。タイトルが「釣り竿」であり、ストアが「ウォルマート」であり、そのタイトルとストアを持つ既存のレコードがあるため、この新しいレコードは無視されます。

   | outdoors | fishing rod | 30.99 | wal-mart

しかし、次のレコードを挿入しようとすると、「釣り竿」というタイトルと「ターゲット」のストアが存在するレコードがないため、受け入れられます。

   | outdoors | fishing rod | 30.99 | target

これはMySQLだけで可能ですか?

15
David

複数の列にインデックスを定義できます。例:

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store);
27
Bugs

はい。 2つの個別の一意性制約の代わりに、両方の列に単一の一意性制約を作成する必要があります。

CREATE INDEX構文は次のとおりです。

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [algorithm_option | lock_option] ...

あなたの例では、次のようになります。

CREATE UNIQUE INDEX index_name ON tbl_name (title,store);

また、作成した2つの誤った一意のインデックスを削除する必要があります。

インデックスの作成方法の詳細については、 ドキュメント を参照してください。

7
Mark Byers

複数列の一意キー が必要です。

1
Shi

他の机 table_name ADD UNIQUE INDEX(titlestore);

1
shyam sasi