2011-12-04 5 views
3

私はプライマリキーに特定のフィールドを必要としないテーブルを持っています。自動インクリメントIDフィールドを追加できますが、データベースクエリ内ではまったく使用されません。キーペアをプライマリにするにはどうすればよいですか?

ユニークキーをプライマリにすることはできますか?

UNIQUE KEYが一緒にペア2つのフィールドから構成されています

a VARCHAR(64) NOT NULL, 
b VARCHAR(64) NOT NULL, 
UNIQUE KEY uk_ab(a,b) 

答えて

6

確かに(UNIQUE KEYは必要ありません):

PRIMARY KEY (a, b) 

documentationをご覧ください:

PRIMARY KEYは、すべてのキー列をNOT NULLとして定義する必要がある一意のインデックスです。 NOT NULLとして明示的に宣言されていない場合、MySQLは暗黙的に(およびサイレントに)宣言します。テーブルは1つだけPRIMARY KEYを持つことができます。 PRIMARY KEYの名前は常にPRIMARYであるため、他の種類のインデックスの名前として使用することはできません。 PRIMARY KEYは、複数列のインデックスとすることができる

。ただし、列指定のキー属性PRIMARY KEYを使用して複数列索引を作成することはできません。これを行うと、単一の列がプライマリとしてマークされます。別のPRIMARY KEY(index_col_name, ...)句を使用する必要があります。

1

ない、これがうまくいくかどうかわから...

PRIMARY KEY uk_ab(a,b) 
1

テーブルにすでに一意制約がある場合は、主キー(ALTER TABLE [table_name] ADD CONSTRAINT [constraint_name] PRIMARY KEY (a,b))を追加して、既存の一意制約を削除する必要があります。そうしないと、同じ列に2つのユニークなインデックスが作成されます。
新しいテーブルを作成する場合は、UNIQUE(a,b)の代わりにPRIMARY KEY(a,b)を使用してください。

関連する問題