web-dev-qa-db-ja.com

MySQL-値のペアを一意にする

IDである2つのint値を持つテーブルがあります。これらのIDは、テーブル内で何度でも表示できますが、一緒に表示されるのは一度だけです。

値のペアを一意にし、それでも個々の値が複数回表示されるようにする方法はありますか?

フォローアップとして、これが可能な場合、値のペアをキーとして使用できますか?現在、キーの一意の自動インクリメント値の3番目の列があります。

39
Josh Brittain

これは複合キーと呼ばれます。

実際のPKを複合PKに変更する場合は、使用します

Alter table <your table> drop PRIMARY KEY;
Alter table <your table> drop COLUMN <your autoincremented column>;

Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>);

一意の制約を追加することもできます(PKは同じで、一意のペア...は一意である必要があります)。

alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);

個人的には、2番目のソリューション(単純なPK +一意の制約)をお勧めしますが、それは単なる個人的な観点です。複合キーに関する賛否両論をグーグルで検索できます。

[]の間の部分はオプションです。

[〜#〜] edit [〜#〜]

Create tableステートメントでこれを行いたい場合

複合pkの場合

CREATE TABLE Test(
    id1 int NOT NULL, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1, id2)
);

一意のインデックスの場合

CREATE TABLE Test1(
    id1 int NOT NULL AUTO_INCREMENT, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1),
    UNIQUE KEY (id2, id3)
);
62

これを試してください:ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

9

primary key (col1, col2)をテーブル作成定義に追加します

0
jspcal