MySQLのAUTO_INCREMENT(整数型)の上限値とは?各データ型の最大値を実例付きで解説
AUTO_INCREMENTの上限値はデータ型によって決まる
MySQLのAUTO_INCREMENTで採番できる値の上限は、カラムに指定したデータ型によって異なります。符号なし(UNSIGNED)を指定すると、同じ型でも扱える最大値が約2倍になります。各整数型の範囲は以下のとおりです。
| データ型 | 範囲(最大値) |
|---|---|
| TINYINT | 127 |
| UNSIGNED TINYINT | 255 |
| SMALLINT | 32767 |
| UNSIGNED SMALLINT | 65535 |
| MEDIUMINT | 8388607 |
| UNSIGNED MEDIUMINT | 16777215 |
| INT | 2147483647 |
| UNSIGNED INT | 4294967295 |
| BIGINT | 9223372036854775807 |
| UNSIGNED BIGINT | 18446744073709551615 |
TINYINTでの検証例
ここでは、最も範囲の狭いTINYINT型を使って実際の挙動を確認してみます。TINYINTの最大値は127なので、128番目のレコードを挿入しようとした時点でエラーが発生するはずです。
1. テーブルを作成する
まず、IdカラムをAUTO_INCREMENTに設定したテーブルを作成します。
mysql> create table LimitOfAutoIncrement
-> (
-> Id TINYINT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.68 sec)
2. 上限いっぱいの127件を挿入する
次に、TINYINTの上限である127件のレコードを一括で挿入します。values() を127回繰り返して記述しています。
mysql> insert into LimitOfAutoIncrement values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(); Query OK, 127 rows affected (0.20 sec) Records: 127 Duplicates: 0 Warnings: 0
3. 登録内容を確認する
SELECT文で全レコードを表示すると、Idには1から127までの連番が採番されていることがわかります。
mysql> select * from LimitOfAutoIncrement;
実行結果(抜粋):
+-----+ | Id | +-----+ | 1 | | 2 | | 3 | | ... | | 125 | | 126 | | 127 | +-----+ 127 rows in set (0.00 sec)
4. 上限を超えて挿入するとエラーになる
127件挿入した時点でAUTO_INCREMENTの上限に達しているため、これ以上レコードを追加しようとすると主キー重複のエラーが発生します。
mysql> insert into LimitOfAutoIncrement values(); ERROR 1062 (23000): Duplicate entry '127' for key 'PRIMARY'
まとめ:設計時点で適切なデータ型を選ぶことが重要
AUTO_INCREMENTの上限に達すると新規レコードが挿入できなくなり、システム障害につながる可能性があります。そのため、テーブル設計の時点で想定されるレコード数を見積もり、適切なデータ型を選択することが重要です。
- 小規模なマスターテーブルなど:TINYINTやSMALLINTでも十分
- 一般的な業務テーブル:INT(約21億件まで)が標準的
- 大量データが見込まれるテーブル:BIGINTを選択
- IDに負の値が不要な場合:UNSIGNEDを付けて正の範囲を2倍に拡張
特にBIGINT UNSIGNEDを採用すれば約1,844京(18,446,744,073,709,551,615)まで採番できるため、事実上上限を気にする必要はほぼありません。
-
MySQLのエイリアスでASキーワードは省略できる?使い方を実例付きで解説
MySQLでは、カラムにエイリアス(別名)を付ける際、ASキーワードを明示的に書く方法とASを省略する方法の2通りがあります。どちらの書き方でも同じ結果が得られますが、この記事では実際のSQL文の例を通して、それぞれの使い方と実行結果を詳しく解説します。準備:サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &nbs
-
MySQLの主な機能とは?特徴をわかりやすく解説
MySQLは、データを効率的に保存・管理するためのデータベース管理システム(DBMS)です。データベースは一般的に、データを構造化された形式で格納します。MySQLはC言語とC++で記述されており、さまざまなコンパイラでテストが行われ、バグや不整合がないことが確認されています。ここでは、MySQLの主な機能について詳しく見ていきましょう。オープンソースMySQLはオープンソースソフトウェアであり、誰でも自由にダウンロード、利用、改変することができます。無料で使用でき、理解しやすいのも大きな魅力です。ソースコードは公開されているため、必要に応じて内容を確認したり変更したりできます。ライセンスには