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

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

最終更新:
💡 新しい行の番号を、DBに割り当ててもらう

新しい行に使う番号をデータベース側で自動的に増やして割り当てる仕組み。欠番と、重複を防ぐ制約が別の役割であることを説明します。

📌 このページのポイント
自動採番:番号に欠番ができるInnoDB:割り当てた番号と保存の例ID=1保存ID=2取り消しID=3保存保存:ID 1 と ID 3 の2件ID 2の行はない最大IDは3でも、行数は2。採番と件数は別
ID=2を割り当てた処理をロールバックし、欠番になる仮想例。重複を防ぐ制約は別の役割で、開始値や増分は設定によります。
ひよこ ひよこ
会員IDを、自分で数えて付けるの?
ペンギン先生 ペンギン先生
自動採番を設定すれば、DB側に番号を割り当ててもらえるよ。MySQLのAUTO_INCREMENTなら、挿入する行のその列を省略すると番号を生成する。公式の例は主キーも設定しているんだ。
ひよこ ひよこ
いつも1、2、3と隙間なく並ぶ?
ペンギン先生 ペンギン先生
欠番ができることはあるよ。例えばMySQLのInnoDBでは、番号を割り当てた処理をロールバックしても、その番号を再利用しない。取り消した処理の番号だけ、保存された行から抜けることがあるんだ。
ひよこ ひよこ
IDの最大値を見れば、会員数が分かる?
ペンギン先生 ペンギン先生
欠番や削除があるから、行数とは一致しないよ。番号を付ける目的と、件数を数える目的は別。最新の番号だけで、保存された行が何件あるかを判断しないようにしよう。
ひよこ ひよこ
自動なら、重複の設定はいらない?
ペンギン先生 ペンギン先生
PostgreSQLのIDENTITY列は、自動生成だけで一意性を保証しないと説明されているよ。手動で値を入れたり、シーケンスをリセットしたりできるため、重複を防ぐにはPRIMARY KEYやUNIQUEの制約を使うんだ。
ひよこ ひよこ
自動で付く番号は、秘密の合言葉?
ペンギン先生 ペンギン先生
番号は行を識別するためのものだよ。IDが分かったことと、そのデータを読んでよいことは別。利用者がアクセスできるかは、別途確認する必要があるね。
もっと詳しく知りたい人へ

他のDBでも、AUTO_INCREMENTと書く?

書き方はDBによります。PostgreSQLのIDENTITY列は暗黙のシーケンスから値を生成し、GENERATED ALWAYSとBY DEFAULTでは明示した値の扱いも違います。MySQLの書き方をそのまま移さず、対象の仕様を確認します。

番号を手動で変えても、自動生成に影響しない?

影響する場合があります。MySQLは、AUTO_INCREMENT列へ大きな値を明示して挿入した場合などの採番への影響を説明しています。欠番を埋めるために番号を振り直すことを、通常の自動採番と同じ操作だとは考えません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「オートインクリメント」って出てきたら「新しい行の番号を、DBが自動で増やして割り当てる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Auto increment」 = 自動的に増やす
💬 MySQLのAUTO_INCREMENTを例に説明します。PostgreSQLではシーケンスを使うIDENTITY列などがあり、書き方や細かな規則は異なります。

参考資料

← 用語集にもどる