カテゴリ: PostgreSQL 更新日: 2026/01/02

PostgreSQLのSERIALとIDENTITYの違いを解説

PostgreSQLのSERIALとIDENTITYの違いを解説
PostgreSQLのSERIALとIDENTITYの違いを解説

先生と生徒の会話形式で理解しよう

生徒

「PostgreSQLでテーブルを作るときに、SERIALとかIDENTITYって書いてあるのを見ました。これは何ですか?」

先生

「どちらも、番号を自動で振ってくれる仕組みです。名簿で1番、2番、3番と自動で番号が付くイメージですね。」

生徒

「じゃあ、どっちを使っても同じなんですか?」

先生

「似ていますが仕組みが少し違います。違いを知っておくと、あとで困りにくくなります。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースという「情報を整理して保存する箱」に対して命令を出すための言葉です。PostgreSQLは、そのSQLを使って操作できる代表的なデータベースです。

テーブルは紙の表、行は1人分の情報、列は名前や年齢といった項目だと考えると理解しやすくなります。

2. 自動で番号を付ける必要性

2. 自動で番号を付ける必要性
2. 自動で番号を付ける必要性

多くのテーブルでは、1行ずつを区別するために「番号」が必要になります。これをIDと呼びます。

人が毎回番号を考えて入力すると、同じ番号を入れてしまうミスが起きやすくなります。そこでPostgreSQLには、番号を自動で増やしてくれる仕組みがあります。

3. SERIALとは何か

3. SERIALとは何か
3. SERIALとは何か

SERIALは、昔からよく使われてきた自動採番の書き方です。見た目は1つの型ですが、内部では「連番を作る仕組み」が一緒に作られています。


CREATE TABLE users (
    id SERIAL,
    name TEXT
);

SERIALを使うと、データを追加するたびに1、2、3と自動で番号が入ります。黒板に順番を書いていくようなイメージです。

4. SERIALでデータを入れた例

4. SERIALでデータを入れた例
4. SERIALでデータを入れた例

上のテーブルにデータを入れると、次のようになります。


id | name
---+--------
1  | 山田太郎
2  | 佐藤花子
3  | 鈴木一郎
4  | 高橋次郎

idは指定していませんが、自動で連番が入っています。

5. IDENTITYとは何か

5. IDENTITYとは何か
5. IDENTITYとは何か

IDENTITYは、比較的新しく追加された正式な自動採番の書き方です。SQLのルールに沿った方法として用意されています。

SERIALよりも「これは自動で決まる番号です」と明確に宣言できる点が特徴です。


CREATE TABLE users (
    id INTEGER GENERATED ALWAYS AS IDENTITY,
    name TEXT
);

GENERATED ALWAYS AS IDENTITYと書くことで、「この列の値は自動で決めます」という意味になります。

6. IDENTITYでデータを入れた例

6. IDENTITYでデータを入れた例
6. IDENTITYでデータを入れた例

IDENTITYを使った場合も、結果はほぼ同じです。


id | name
---+--------
1  | 山田太郎
2  | 佐藤花子
3  | 鈴木一郎
4  | 高橋次郎

見た目は同じでも、内部の管理方法が少し異なります。

7. SERIALとIDENTITYの違い

7. SERIALとIDENTITYの違い
7. SERIALとIDENTITYの違い

SERIALは便利な省略記法で、裏側で連番用の仕組みが自動作成されます。一方、IDENTITYはSQLの仕様として用意された正式な書き方です。

初心者のうちは「SERIALは簡単」「IDENTITYは新しくて安心」と覚えておくと十分です。

8. 初心者におすすめの考え方

8. 初心者におすすめの考え方
8. 初心者におすすめの考え方

学習中や個人の練習ではSERIALを使っても問題ありません。自動で番号が増える仕組みを理解することが大切です。

名簿の番号係を機械に任せる、という感覚で理解すると、SERIALもIDENTITYも難しく感じにくくなります。

9. よくある勘違い

9. よくある勘違い
9. よくある勘違い

SERIALやIDENTITYは「特別な数字」ではなく、あくまで自動入力の仕組みです。番号そのものに意味を持たせすぎないことが大切です。

データを区別するための目印だと考えると、正しく使えます。

カテゴリの一覧へ
新着記事
New1
MySQL
【MySQL入門】LIMITとは何か?SELECT文で取得件数を制限する方法を初心者向けに徹底解説
New2
PostgreSQL
PostgreSQLのMAX・MIN完全解説|集約関数とGROUP BYで最大値・最小値を抽出する方法
New3
MySQL
MySQLのORDER BYで文字列を並び替える方法と注意点を徹底解説|SQL初心者向け完全ガイド
New4
PostgreSQL
PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)