MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのAUTO_INCREMENT(整数型)の上限値とは?各データ型の最大値を実例付きで解説

AUTO_INCREMENTの上限値はデータ型によって決まる

MySQLのAUTO_INCREMENTで採番できる値の上限は、カラムに指定したデータ型によって異なります。符号なし(UNSIGNED)を指定すると、同じ型でも扱える最大値が約2倍になります。各整数型の範囲は以下のとおりです。

データ型範囲(最大値)
TINYINT127
UNSIGNED TINYINT255
SMALLINT32767
UNSIGNED SMALLINT65535
MEDIUMINT8388607
UNSIGNED MEDIUMINT16777215
INT2147483647
UNSIGNED INT4294967295
BIGINT9223372036854775807
UNSIGNED BIGINT18446744073709551615

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)まで採番できるため、事実上上限を気にする必要はほぼありません。

  1. MySQLのエイリアスでASキーワードは省略できる?使い方を実例付きで解説

    MySQLでは、カラムにエイリアス(別名)を付ける際、ASキーワードを明示的に書く方法とASを省略する方法の2通りがあります。どちらの書き方でも同じ結果が得られますが、この記事では実際のSQL文の例を通して、それぞれの使い方と実行結果を詳しく解説します。準備:サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable     (     Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,  &nbs

  2. MySQLの主な機能とは?特徴をわかりやすく解説

    MySQLは、データを効率的に保存・管理するためのデータベース管理システム(DBMS)です。データベースは一般的に、データを構造化された形式で格納します。MySQLはC言語とC++で記述されており、さまざまなコンパイラでテストが行われ、バグや不整合がないことが確認されています。ここでは、MySQLの主な機能について詳しく見ていきましょう。オープンソースMySQLはオープンソースソフトウェアであり、誰でも自由にダウンロード、利用、改変することができます。無料で使用でき、理解しやすいのも大きな魅力です。ソースコードは公開されているため、必要に応じて内容を確認したり変更したりできます。ライセンスには