カテゴリ: 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
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎