MENU

【初心者向け】MySQLのプライマリーキー(PRIMARY KEY)とは?設定方法を完全解説

データベースを扱う上で避けて通れないのが「プライマリーキー」です。この記事では、MySQL初心者の方に向けて、プライマリーキーの基本から設定方法、実務での使い方まで、わかりやすく解説します。

目次

プライマリーキーとは?

プライマリーキー(PRIMARY KEY)は、テーブル内の各レコード(行)を一意に識別するための列(カラム)です。簡単に言えば、データベース内の各行に付ける「IDカード」のようなものと考えるとわかりやすいでしょう。

例えば、ユーザー情報を管理するテーブルでは、ユーザーIDをプライマリーキーに設定することで、「山田太郎」という同姓同名の人が複数いても、それぞれを確実に区別できます。

プライマリーキーの3つの特徴

  1. 一意性(ユニーク): 同じ値を持つレコードが存在できない
  2. NOT NULL: 空の値(NULL)を許可しない
  3. 1テーブル1つ: 1つのテーブルに設定できるのは1つだけ

なぜプライマリーキーが必要なのか?

プライマリーキーを設定することで、以下のメリットがあります。

データの整合性を保つ 重複したデータの登録を防ぎ、データベースの品質を維持できます。

検索速度の向上 プライマリーキーには自動的にインデックスが作成されるため、データの検索や取得が高速になります。

他のテーブルとの関連付け 外部キー(FOREIGN KEY)を使って他のテーブルと関連付ける際、プライマリーキーが基準となります。

テーブル作成時にプライマリーキーを設定する方法

新しくテーブルを作る際にプライマリーキーを設定する方法を見ていきましょう。

基本的な設定方法

最もシンプルな書き方は、カラム定義の後ろに PRIMARY KEY を付ける方法です。

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

このコードでは、id カラムをプライマリーキーに設定しています。

別の書き方(推奨)

複数人で開発する場合やテーブル定義を見やすくする場合は、以下の書き方がおすすめです。

CREATE TABLE users (
    id INT,
    name VARCHAR(100),
    email VARCHAR(100),
    PRIMARY KEY (id)
);

この書き方なら、テーブルの最後にプライマリーキーがまとめて記載されるため、どのカラムがキーなのか一目でわかります。

複合プライマリーキーの設定

複数のカラムを組み合わせてプライマリーキーにすることもできます。これを複合プライマリーキーと呼びます。

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    price DECIMAL(10, 2),
    PRIMARY KEY (order_id, product_id)
);

この例では、「注文ID」と「商品ID」の組み合わせで一意性を保証しています。同じ注文に同じ商品は1つしか登録できませんが、異なる注文であれば同じ商品を登録できます。

既存のテーブルにプライマリーキーを追加する方法

すでに作成済みのテーブルに後からプライマリーキーを追加したい場合は、ALTER TABLE 文を使用します。

ALTER TABLE users
ADD PRIMARY KEY (id);

注意点

既存データがある場合、以下の条件を満たしている必要があります。

  • 指定するカラムに重複した値がないこと
  • 指定するカラムにNULL値がないこと

これらの条件を満たしていないと、エラーが発生してプライマリーキーを追加できません。

AUTO_INCREMENTと組み合わせる(実務で最頻出)

実務では、プライマリーキーに AUTO_INCREMENT を組み合わせるパターンが最も一般的です。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

AUTO_INCREMENTのメリット

  • 自動採番: データを挿入するたびに、自動的に1ずつ増加した値が設定される
  • 重複の心配なし: 手動で値を指定する必要がないため、重複エラーが発生しない
  • 管理が簡単: IDの管理をMySQLに任せられる

実際の使用例

-- データ挿入時はIDを指定しない
INSERT INTO users (name, email) 
VALUES ('山田太郎', 'yamada@example.com');

INSERT INTO users (name, email) 
VALUES ('佐藤花子', 'sato@example.com');

-- 結果:idは自動的に1, 2, 3...と採番される

プライマリーキーを削除する方法

プライマリーキーを削除したい場合は、以下のSQL文を使用します。

ALTER TABLE users
DROP PRIMARY KEY;

削除時の注意点

  • AUTO_INCREMENT が設定されている場合、先にそれを解除する必要があることがあります
  • 外部キー制約で参照されている場合は、先に外部キーを削除する必要があります

よくあるエラーと解決方法

初心者がつまずきやすいエラーとその解決策をご紹介します。

エラー1: Duplicate entry(重複エラー)

ERROR 1062: Duplicate entry '1' for key 'PRIMARY'

原因: すでに存在する値を挿入しようとしている

解決方法:

  • AUTO_INCREMENT を使用する
  • 挿入前に既存データを確認する

エラー2: Multiple primary key defined(複数定義エラー)

ERROR 1068: Multiple primary key defined

原因: 1つのテーブルに2つ以上のプライマリーキーを設定しようとしている

解決方法:

  • 複合キーにする場合は PRIMARY KEY (col1, col2) の形式で1つにまとめる
  • または、どちらか1つだけをプライマリーキーにする

エラー3: Column cannot be null

ERROR 1171: All parts of a PRIMARY KEY must be NOT NULL

原因: NULL値を含むカラムにプライマリーキーを設定しようとしている

解決方法:

  • 先にカラムを NOT NULL に変更する
  • NULL値を持つレコードを削除または更新する

プライマリーキー設定のベストプラクティス

実務で役立つ推奨事項をまとめました。

1. 必ずプライマリーキーを設定する

すべてのテーブルにプライマリーキーを設定することを強く推奨します。プライマリーキーがないテーブルは、データの整合性やパフォーマンスの面で問題が発生しやすくなります。

2. 単純な整数型を使う

特別な理由がない限り、INT 型で AUTO_INCREMENT を使用するのがシンプルで効率的です。

id INT AUTO_INCREMENT PRIMARY KEY

大規模なシステムの場合は BIGINT を検討しましょう。

3. 意味のある値は避ける

メールアドレスや社員番号など、意味のある値をプライマリーキーにするのは避けましょう。これらの値は将来変更される可能性があり、変更時に多くの問題を引き起こします。

4. 複合キーは慎重に

複合プライマリーキーは必要な場合にのみ使用しましょう。多くの場合、単一の AUTO_INCREMENT カラムを追加する方がシンプルで管理しやすくなります。

5. 命名規則を統一する

チーム内でプライマリーキーの命名規則を統一すると、コードの可読性が向上します。一般的には id または テーブル名_id(例:user_id)が使われます。

まとめ

MySQLのプライマリーキーについて、設定方法から実務での使い方まで解説しました。

重要ポイントのおさらい

  • プライマリーキーは各レコードを一意に識別するための必須要素
  • テーブル作成時は PRIMARY KEY で設定、既存テーブルには ALTER TABLE で追加
  • AUTO_INCREMENT との組み合わせが実務では最も一般的
  • 1テーブルに1つだけ、NULL値は許可されない
  • すべてのテーブルにプライマリーキーを設定することを推奨

プライマリーキーはデータベース設計の基礎中の基礎です。この記事で学んだ知識を活かして、堅牢なデータベースを構築していきましょう。

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次