【SQL入門】PRIMARY KEY(主キー)制約とは?追加や削除についても解説

こんにちは!システムエンジニアのオオイシです。

SQLのPRIMARY KEY(主キー)をご存知ですか?

PRIMARY KEYの使いかたを覚えると、高速にテーブルデータの検索が実行できたり、整合性の取れたデータを作成することが可能です。

この記事では、

  • PRIMARY KEY(主キー)とは?
  • PRIMARY KEY(主キー)の役割について理解しよう
  • PRIMARY KEY(主キー)の作成方法
  • PRIMARY KEY(主キー)を後から追加してみよう
  • PRIMARY KEY(主キー)を削除してみよう
  • 複数の列にPRIMARY KEY(主キー)を追加する方法


などの基礎的な使い方から応用的な使い方関しても解説していきます。

今回はそんなPRIMARY KEYの使い方をわかりやすく解説します!

PRIMARY KEY(主キー)とは?

PRIMARY KEYは(主キー)とは、テーブルに登録するレコード(データ行)の全体のうち、ひとつのデータに特定することをデータベースが保証する列のことです。

例えば、従業員テーブルに「従業員番号、部署番号、姓、名」の項目があるとして、PRIMARY KEYである「従業員番号」で一人の従業員の姓名を特定するような場合です。

sql_primary_key_1

そんな、PRIMARY KEYの役割について次項で確認していきましょう。

なお、SQL開発環境の準備がまだの場合は、こちらで詳しく解説していますので、ぜひ参考にしてください!

PRIMARY KEY(主キー)の役割について理解しよう

PRIMARY KEYは、世の中にあるデータベースのテーブルのほとんどはPRIMARY KEYが設定されているといっていいほど、重要な役割があります。

そんなPRIMARY KEYの役割は

  • テーブル検索のスピードを格段に早くする
  • テーブルデータの整合性を保証する


です。

PRIMARY KEYを設定すると「どこに何が登録されているか?」を探すためのインデックスと呼ばれる情報が自動的に作成されます。また、PRIMARY KEYを設定した列は同じデータは登録できないためエラーとなり、NULL値も登録できません。

PRIMARY KEYの重要性について理解いただけたところで、次はPRIMARY KEYの作成方法について解説してきます!

PRIMARY KEY(主キー)の作成方法

PRIMARY KEYを作成するには、一般的にテーブル作成と同時に設定します。

テーブル作成と同時にPRIMARY KEYを設定するには、CREATE TABLE文の中に、

  • PRIMARY KEY (列名)


を追加します。

「従業員番号、部署番号、性、名」を持つテーブルを作成すると同時に「従業員番号」にPRIMARY KEYを設定するサンプルコードを確認してみましょう。

CREATE TABLE sample1_employees (
    no int NOT NULL,  -- 従業員番号
    department_no int, -- 部署番号
    last_name varchar(255), -- 名
    first_name varchar(255), -- 姓
    PRIMARY KEY (no)
);

PRIMARY KEYが設定されたかを確認してみましょう。Sequel Proを使った場合は次のように確認できます。

sql_primary_key_2png (1)

このように「従業員番号(no)」にPRIMARY KEYが定義されたことが確認できました。

もしも、MySQLのコマンドで確認したい場合は、DESCコマンドを使ってKey列を確認します。

"PRI"が設定されていれば、その列はPRIMARY KEYです。

mysql> desc sample1_employees;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| no            | int(11)      | NO   | PRI | NULL    |       |
| department_no | int(11)      | YES  |     | NULL    |       |
| last_name     | varchar(255) | YES  |     | NULL    |       |
| first_name    | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

次項では、PRIMARY KEYを後から追加する方法について解説していきます!

PRIMARY KEY(主キー)を後から追加してみよう

作成したテーブルに、PRIMARY KEYを後から追加するには、次のコマンドで作成できます。

  • ALTER TABLE テーブル名 ADD PRIMARY KEY(列名);


従業員テーブルの「従業員番号(no) 」にPRIMARY KEYを設定するサンプルコードを確認してみましょう。

はじめに、従業員テーブルをPRIMARY KEYの設定なしで作成します。

CREATE TABLE sample2_employees (
    no int NOT NULL,  -- 従業員番号
    department_no int, -- 部署番号
    last_name varchar(255), -- 名
    first_name varchar(255)  -- 姓
);

テーブル定義の状態:

mysql> desc sample2_employees;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| no            | int(11)      | NO   |     | NULL    |       |
| department_no | int(11)      | YES  |     | NULL    |       |
| last_name     | varchar(255) | YES  |     | NULL    |       |
| first_name    | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

「Key列」に”PRI”がないため、PRIMARY KEYは定義されていないことが確認できます。

つづいて、ALTER TABLE文で「従業員番号(no)」にPRIMARY KEYを設定します。

ALTER TABLE sample2_employees ADD PRIMARY KEY(no);

テーブルの定義:

mysql> desc sample2_employees;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| no            | int(11)      | NO   | PRI | NULL    |       |
| department_no | int(11)      | YES  |     | NULL    |       |
| last_name     | varchar(255) | YES  |     | NULL    |       |
| first_name    | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

このように、ALTER TABLE 文でPRIMARY KEYを後から追加できることを確認することができました。

次は、PRIMARY KEYを削除する方法について解説します。

PRIMARY KEY(主キー)を削除してみよう

PRIMARY KEYを削除するには、

  • ALTER TABLE テーブル名 DROP PRIMARY KEY;


で実行できます。

次のサンプルコードで実行して見ましょう。

ALTER TABLE sample2_employees DROP PRIMARY KEY;

テーブル定義の状態:

mysql> desc sample2_employees;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| no            | int(11)      | NO   |     | NULL    |       |
| department_no | int(11)      | YES  |     | NULL    |       |
| last_name     | varchar(255) | YES  |     | NULL    |       |
| first_name    | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

このように、「no列」のPRIMARY KEYを削除したことが確認できました。

複数の列にPRIMARY KEY(主キー)を追加する方法

PRIMARY KEYは2つ以上の列に追加することもできます。

例えば、部署ごとに従業員番号を設定したい時は「従業員番号+部署番号」で一意になるはずです。

このように、複数のPRIMARY KEYを作成するためには、

  • PRIMARY KEY (列名,列名...)


とカンマ区切りで複数を設定します。

サンプルコードで「従業員番号(no)+部署番号(department_no)」にPRIMARY KEYを定義するサンプルコードを確認してみましょう。

CREATE TABLE sample3_employees (
    no int NOT NULL,  -- 従業員番号
    department_no int, -- 部署番号
    last_name varchar(255), -- 名
    first_name varchar(255), -- 姓
    PRIMARY KEY (no, department_no)
);

テーブルの定義:

mysql> desc sample3_employees;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| no            | int(11)      | NO   | PRI | NULL    |       |
| department_no | int(11)      | NO   | PRI | 0       |       |
| last_name     | varchar(255) | YES  |     | NULL    |       |
| first_name    | varchar(255) | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

このように、複数のPRIMARY KEYを設定することができました。

まとめ

いかかでしたか?

今回はSQLのPRIMARY KEY(主キー)について解説しました。

PRIMARY KEYは、テーブル検索のスピードを格段に早くしたり、テーブルデータの整合性を保証するため作成します。

PRIMARY KEYは、データベースのテーブル設計をする上で必須のスキルなので、ぜひ取得してみてください。そして、PRIMARY KEYの使い方を忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

オオイシ

オオイシ

システムエンジニア歴15年のオオイシです!好物は Java と Ruby。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。
システム開発の相談やお困りごとがあればお気軽に
[email protected] まで連絡頂けると幸いです

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説