データベースを設計する上で欠かせないのが「主キー」の定義です。
主キーは、各レコードを一意に識別するための重要なカラムであり、テーブルの構造を考える上で最初に決めておきたい要素のひとつです。
この記事では、PRIMARY KEY をはじめ、AUTO_INCREMENT、NOT NULL、SERIAL など、主キーに関係する代表的な型や制約について整理し、5つの具体例を通して実践的な使い方をわかりやすく解説します。
制約一覧
✅ 主キーに関連する属性・制約の意味(まず概要)
| 属性/制約名 | 説明 |
|---|---|
| SERIAL | 自動的に BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE を定義する便利な型 |
| NOT NULL | 値の省略不可。必ず値が必要 |
| DEFAULT | 値を指定しなかったときに自動で入る初期値 |
| UNIQUE | 重複を許さない(=1つだけ) |
| PRIMARY KEY | テーブルの主キー。(NOT NULL)」(UNIQUE)」が自動でつきます。 |
| AUTO_INCREMENT | 自動で連番がふられる(通常は主キーに使う) |
最も基本的な主キー定義(INT + AUTO_INCREMENT)
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
);SQL🔸ポイント:
- id が主キーで自動連番
- よく使うパターン。MySQL/MariaDBでは一番王道
- PRIMARY KEY を使うだけなら NOT NULL は省略可能(自動で付く)
- AUTO_INCREMENT を付ける場合は NOT NULL を明示しないといけない
SERIAL を使って一発で主キー定義
CREATE TABLE products (
product_id SERIAL,
name VARCHAR(100)
);SQL🔸ポイント:
- SERIAL = BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
- 手軽に主キー相当のカラムを定義できる
- 必ず
UNIQUEになるが、PRIMARY KEYではないので注意(明示的に指定したほうがよい)
自然キー(例:メールアドレス)を主キーにする
CREATE TABLE accounts (
email VARCHAR(255) NOT NULL,
name VARCHAR(100),
PRIMARY KEY (email)
);SQL🔸ポイント:
- メールアドレスがユニークな主キーになる
- AUTO_INCREMENT は使えないが、意味のある主キーとして使えるパターン
主キー+UNIQUEな別カラム(例:社員番号とログインID)
CREATE TABLE employees (
id INT NOT NULL AUTO_INCREMENT,
login_id VARCHAR(50) UNIQUE,
name VARCHAR(100),
PRIMARY KEY (id)
);SQL🔸ポイント:
idが主キーlogin_idは重複不可(UNIQUE制約)
複合主キー(2つのカラムを組み合わせて主キーにする)
CREATE TABLE orders (
user_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (user_id, product_id)
);SQL🔸ポイント:
単一のカラムでなくても主キーは作れる
user_id と product_id の組み合わせが主キー(1ユーザーが同じ商品を重複注文できないようにする)


コメント