MySQLで主キー制約を設定する「PRIMARY KEY」

MySQLには、カラムの設定のひとつとして主キー制約(プライマリーキー)があります。今回は、このプライマリーキーについてユニークキーとの関係も含め紹介します。

MySQLの主キー制約とは?

MySQLにおいて、主キー制約が設定されたカラムの値は、ほかのカラムとの重複不可、かつnullも不可となります。

そのため、ユーザーIDなどのように、データを一意に識別する必要がある場合に用いられることが多いです。

主キーとインデックス

主キーに設定されたカラムには、暗黙的にPRIMARYというKey Nameのユニークインデックスが作成されます。以下のクエリで、主キーを設定したテーブルを確認できます。

SHOW index FROM テーブル名;

主キー制約の指定の仕方

主キー制約の設定の仕方には、列制約と表制約という2つの書式があります。この2つには次のような違いがあります。

・列制約は複数の列を指定できない
・列制約でないとNOT NULLは指定できない

列制約:カラムに対して主キー制約を設定

CREATE TABLE テーブル名 (
  カラム1 型情報 NOT NULL PRIMARY KEY,
  カラム2 型情報
);

列の定義の中で、型情報のあとに主キー制約を指定する方法です。この時、NOT NULLも合わせて設定する必要があります。

表制約:テーブルに対して主キー制約を設定

CREATE TABLE テーブル名 (
  カラム1 型情報 NOT NULL,
  カラム2 型情報 NOT NULL,
  カラム3 型情報,
  PRIMARY KEY(カラム1,カラム2)
);

列の定義の終わりに、表に対して主キー制約を行う方法です。表制約の場合は、主キー制約を複数設定できます。

主キー制約とユニークキー制約の違いは?

ユニークキー制約が設定されたカラムの値は、ほかのカラムとの重複不可となります。ただし、プライマリーキーとは異なりnullは保存できます。

また、ユニークキー制約も主キー制約と同じく、そのカラムを対象としたユニークインデックスが作成されます。


イベント

2017/12/05(火)
Design Thinking Square