【おーといんくりめんと】

オートインクリメント とは?

💡 レコード追加ごとに「自動で連番を振ってくれる」機能
📌 このページのポイント
オートインクリメント(自動採番) ID 名前 メール 1 田中太郎 tanaka@... 2 佐藤花子 sato@... 3 鈴木一郎 suzuki@... 4 ←自動 新規ユーザー new@... INSERTするたびにIDが自動で +1 される 重複しない一意のIDを自動生成!
オートインクリメントのイメージ
ひよこ ひよこ

オートインクリメントってどう設定するの?

ペンギン先生 ペンギン先生

MySQLなら「CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))」のように書く。INSERT時にidを指定しなければ自動で1, 2, 3と番号が振られるよ。PostgreSQLだと「id SERIAL PRIMARY KEY」か「id INT GENERATED ALWAYS AS IDENTITY」と書く。

ひよこ ひよこ

レコードを削除したら番号が詰まるの?

ペンギン先生 ペンギン先生

詰まらない。id=3を削除しても次に挿入されるのはid=4。欠番は気にしなくていい。番号に意味を持たせる(通し番号として使う)のはオートインクリメントの目的とは違うんだ。

ひよこ ひよこ

UUIDとオートインクリメント、どっちを使うべき?

ペンギン先生 ペンギン先生

オートインクリメントはシンプルで高速だけど、連番なので「次のIDが推測しやすい」というセキュリティ上の懸念がある。UUIDはランダムな文字列だから推測できないけど、128ビットと大きくてインデックスの効率が落ちる。外部に公開するIDはUUID、内部のリレーションにはオートインクリメントという使い分けも多いよ。

ひよこ ひよこ

オートインクリメントの値が上限に達したらどうなるの?

ペンギン先生 ペンギン先生

INT型だと約21億が上限で、そこに達すると挿入がエラーになる。大規模サービスではBIGINT(約922京)を使えばまず問題ないけど、実はもっと厄介なのはマルチマスター構成のとき。複数のDBサーバーで同時にINSERTすると同じ番号が振られてしまう。increment_offsetやincrement_incrementで奇数・偶数に分けたり、Snowflake IDのような分散ID生成の仕組みを使ったりと、スケールアウトとの相性の悪さをどう解消するかが意外と深い話なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
オートインクリメントって出てきたら「レコードを追加するたびに自動で連番を振ってくれる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Auto Increment」 = 自動(Auto)増加(Increment)
💬 「Auto(自動で)」+「Increment(増やす)」。挿入のたびに自動で数値を1つ増やすという意味
← 用語集にもどる