48

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

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

フォローアップとして、これが可能であれば、値のペアをキーとして使用できますか?現在、キーの一意の自動増分値の3番目の列があります。

4

3 に答える 3

80

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

実際の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 +一意の制約)をお勧めしますが、それは個人的な観点にすぎません。複合キーに関する賛否両論の議論をグーグルで検索できます。

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

編集

createtableステートメントでこれを実行したい場合

複合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)
);
于 2012-10-06T20:52:35.147 に答える
10

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

于 2012-10-06T20:52:19.373 に答える
0

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

于 2012-10-06T20:48:13.210 に答える