私はプライマリキーに特定のフィールドを必要としないテーブルを持っています。自動インクリメントIDフィールドを追加できますが、データベースクエリ内ではまったく使用されません。キーペアをプライマリにするにはどうすればよいですか?
ユニークキーをプライマリにすることはできますか?
UNIQUE KEYが一緒にペア2つのフィールドから構成されています
a VARCHAR(64) NOT NULL,
b VARCHAR(64) NOT NULL,
UNIQUE KEY uk_ab(a,b)
私はプライマリキーに特定のフィールドを必要としないテーブルを持っています。自動インクリメントIDフィールドを追加できますが、データベースクエリ内ではまったく使用されません。キーペアをプライマリにするにはどうすればよいですか?
ユニークキーをプライマリにすることはできますか?
UNIQUE KEYが一緒にペア2つのフィールドから構成されています
a VARCHAR(64) NOT NULL,
b VARCHAR(64) NOT NULL,
UNIQUE KEY uk_ab(a,b)
確かに(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, ...)
句を使用する必要があります。
ない、これがうまくいくかどうかわから...
PRIMARY KEY uk_ab(a,b)
テーブルにすでに一意制約がある場合は、主キー(ALTER TABLE [table_name] ADD CONSTRAINT [constraint_name] PRIMARY KEY (a,b)
)を追加して、既存の一意制約を削除する必要があります。そうしないと、同じ列に2つのユニークなインデックスが作成されます。
新しいテーブルを作成する場合は、UNIQUE(a,b)
の代わりにPRIMARY KEY(a,b)
を使用してください。