MySQLのAUTO_INCREMENTは1から始まる?開始値を変更する方法を実例付きで解説
MySQLのAUTO_INCREMENT(自動インクリメント)は、レコードが挿入されるたびに一意の番号を自動的に割り当てる便利な機能です。デフォルトでは1から始まりますが、ALTER文で開始値を変更したり、テーブル作成時に初期値を指定したりすることも可能です。
本記事では、実際のSQL実行例を交えながら、AUTO_INCREMENTの基本的な動作と、任意の番号から採番を開始する方法を詳しく解説します。
テーブルの作成
まず、AUTO_INCREMENT列を持つテーブルを作成します。
mysql> create table DemoTable
(
UniqueNumber int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(UniqueNumber)
);
Query OK, 0 rows affected (0.53 sec)
レコードの挿入と確認
INSERTコマンドでレコードを挿入します。AUTO_INCREMENT列に値を明示的に指定しない場合は、空のvalues()を渡すだけで連番が自動的に採番されます。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.08 sec)
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。1から順に番号が振られていることが確認できます。
+--------------+ | UniqueNumber | +--------------+ | 1 | | 2 | | 3 | | 4 | +--------------+ 4 rows in set (0.00 sec)
AUTO_INCREMENTの開始値を変更する方法
既存テーブルのAUTO_INCREMENT開始値を変更するには、ALTER TABLE文を使用します。以下の例では、開始値を1000に設定しています。
mysql> alter table DemoTable AUTO_INCREMENT=1000; Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0
変更後、再度レコードを挿入して動作を確認します。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(); Query OK, 1 row affected (0.12 sec)
SELECT文で結果を表示します。
mysql> select *from DemoTable;
実行結果を見ると、新しく挿入されたレコードには1000以降の番号が採番されていることがわかります。なお、既存のレコード(1〜4)の値はそのまま維持されます。
+--------------+ | UniqueNumber | +--------------+ | 1 | | 2 | | 3 | | 4 | | 1000 | | 1001 | | 1002 | +--------------+ 7 rows in set (0.00 sec)
補足:テーブル作成時に開始値を指定する方法
テーブルを作成する時点でAUTO_INCREMENTの開始値を決めておきたい場合は、CREATE TABLE文の末尾にAUTO_INCREMENT=数値を追加します。
mysql> create table DemoTable2
(
UniqueNumber int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(UniqueNumber)
) AUTO_INCREMENT=500;
Query OK, 0 rows affected (0.45 sec)
この場合、最初に挿入されるレコードには500が割り当てられます。
まとめ
- MySQLのAUTO_INCREMENTは、デフォルトで1から採番が始まる
ALTER TABLE テーブル名 AUTO_INCREMENT=開始値;で既存テーブルの開始値を変更できる- CREATE TABLE文でも
AUTO_INCREMENT=数値オプションにより初期値を設定可能 - 開始値を変更しても、すでに登録済みのレコードの値は変更されない
-
MySQLでAUTO_INCREMENTの値を1から再スタートさせる方法
MySQLでAUTO_INCREMENT(自動採番)の値を1から振り直したい場合は、TRUNCATEでテーブルを初期化するのが最も簡単な方法です。ここでは、実際にサンプルテーブルを作成し、動作を順番に確認していきましょう。サンプルテーブルの作成まず、AUTO_INCREMENT列を持つテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY ); Query OK, 0 rows affected (1.44 sec)次に、INSERTコマンドで複数のレ
-
MySQLで他のカラムの値から新しいカラムの値を導出する方法
MySQLではユーザー定義変数(ユーザー変数)を活用することで、既存のカラムの値をもとに別のカラムの値を計算・導出できます。本記事では、累積和(累積合計)を求める具体例を通して、その方法をわかりやすく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1868 ( Value int ); Query OK, 0 rows affected (0.00 sec)レコードの挿入insertコマンドを使って、テーブルにデータを挿入します。mysql> insert into DemoTable1