PostgreSQLのSERIALとIDENTITYの違いを解説
生徒
「PostgreSQLでテーブルを作るときに、SERIALとかIDENTITYって書いてあるのを見ました。これは何ですか?」
先生
「どちらも、番号を自動で振ってくれる仕組みです。名簿で1番、2番、3番と自動で番号が付くイメージですね。」
生徒
「じゃあ、どっちを使っても同じなんですか?」
先生
「似ていますが仕組みが少し違います。違いを知っておくと、あとで困りにくくなります。」
1. SQLとは何か?
SQLは、データベースという「情報を整理して保存する箱」に対して命令を出すための言葉です。PostgreSQLは、そのSQLを使って操作できる代表的なデータベースです。
テーブルは紙の表、行は1人分の情報、列は名前や年齢といった項目だと考えると理解しやすくなります。
2. 自動で番号を付ける必要性
多くのテーブルでは、1行ずつを区別するために「番号」が必要になります。これをIDと呼びます。
人が毎回番号を考えて入力すると、同じ番号を入れてしまうミスが起きやすくなります。そこでPostgreSQLには、番号を自動で増やしてくれる仕組みがあります。
3. SERIALとは何か
SERIALは、昔からよく使われてきた自動採番の書き方です。見た目は1つの型ですが、内部では「連番を作る仕組み」が一緒に作られています。
CREATE TABLE users (
id SERIAL,
name TEXT
);
SERIALを使うと、データを追加するたびに1、2、3と自動で番号が入ります。黒板に順番を書いていくようなイメージです。
4. SERIALでデータを入れた例
上のテーブルにデータを入れると、次のようになります。
id | name
---+--------
1 | 山田太郎
2 | 佐藤花子
3 | 鈴木一郎
4 | 高橋次郎
idは指定していませんが、自動で連番が入っています。
5. IDENTITYとは何か
IDENTITYは、比較的新しく追加された正式な自動採番の書き方です。SQLのルールに沿った方法として用意されています。
SERIALよりも「これは自動で決まる番号です」と明確に宣言できる点が特徴です。
CREATE TABLE users (
id INTEGER GENERATED ALWAYS AS IDENTITY,
name TEXT
);
GENERATED ALWAYS AS IDENTITYと書くことで、「この列の値は自動で決めます」という意味になります。
6. IDENTITYでデータを入れた例
IDENTITYを使った場合も、結果はほぼ同じです。
id | name
---+--------
1 | 山田太郎
2 | 佐藤花子
3 | 鈴木一郎
4 | 高橋次郎
見た目は同じでも、内部の管理方法が少し異なります。
7. SERIALとIDENTITYの違い
SERIALは便利な省略記法で、裏側で連番用の仕組みが自動作成されます。一方、IDENTITYはSQLの仕様として用意された正式な書き方です。
初心者のうちは「SERIALは簡単」「IDENTITYは新しくて安心」と覚えておくと十分です。
8. 初心者におすすめの考え方
学習中や個人の練習ではSERIALを使っても問題ありません。自動で番号が増える仕組みを理解することが大切です。
名簿の番号係を機械に任せる、という感覚で理解すると、SERIALもIDENTITYも難しく感じにくくなります。
9. よくある勘違い
SERIALやIDENTITYは「特別な数字」ではなく、あくまで自動入力の仕組みです。番号そのものに意味を持たせすぎないことが大切です。
データを区別するための目印だと考えると、正しく使えます。