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

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

公開:
💡 レコード追加ごとに「自動で連番を振ってくれる」機能
📌 このページのポイント
オートインクリメント(自動採番) 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つ増やすという意味
← 用語集にもどる