MySQLには、カラムの設定のひとつとして主キー制約(プライマリーキー)があります。今回は、このプライマリーキーについてユニークキーとの関係も含め紹介します。
MySQLの主キー制約とは?
MySQLにおいて、主キー制約が設定されたカラムの値は、ほかのカラムとの重複不可、かつnullも不可となります。
そのため、ユーザーIDなどのように、データを一意に識別する必要がある場合に用いられることが多いです。
主キーとインデックス
主キーに設定されたカラムには、暗黙的にPRIMARYというKey Nameのユニークインデックスが作成されます。以下のクエリで、主キーを設定したテーブルを確認できます。
1 |
SHOW index FROM テーブル名; |
主キー制約の指定の仕方
主キー制約の設定の仕方には、列制約と表制約という2つの書式があります。この2つには次のような違いがあります。
・列制約は複数の列を指定できない
・列制約でないとNOT NULLは指定できない
列制約:カラムに対して主キー制約を設定
1 2 3 4 |
CREATE TABLE テーブル名 ( カラム1 型情報 NOT NULL PRIMARY KEY, カラム2 型情報 ); |
列の定義の中で、型情報のあとに主キー制約を指定する方法です。この時、NOT NULLも合わせて設定する必要があります。
表制約:テーブルに対して主キー制約を設定
1 2 3 4 5 6 |
CREATE TABLE テーブル名 ( カラム1 型情報 NOT NULL, カラム2 型情報 NOT NULL, カラム3 型情報, PRIMARY KEY(カラム1,カラム2) ); |
列の定義の終わりに、表に対して主キー制約を行う方法です。表制約の場合は、主キー制約を複数設定できます。
主キー制約とユニークキー制約の違いは?
ユニークキー制約が設定されたカラムの値は、ほかのカラムとの重複不可となります。ただし、プライマリーキーとは異なりnullは保存できます。
また、ユニークキー制約も主キー制約と同じく、そのカラムを対象としたユニークインデックスが作成されます。