20

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

たとえば、次のテーブルがあり、「タイトル」と「ストア」が一意のキーである場合

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

次のレコードを挿入しようとしています。この新しいレコードは無視されます。これは、タイトルが「釣り竿」であり、店舗が「wal-mart」であり、そのタイトルと店舗の既存のレコードがあるためです。

   | outdoors | fishing rod | 30.99 | wal-mart

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

   | outdoors | fishing rod | 30.99 | target

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

4

5 に答える 5

37

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

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store);
于 2012-08-25T21:20:09.430 に答える
7

はい。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 つの不適切な一意のインデックスを削除する必要があります。

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

于 2012-08-25T21:18:22.460 に答える
1

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

于 2012-08-25T21:20:03.943 に答える
-1

はい、できます!

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY(title, store);
于 2012-08-25T21:20:37.410 に答える