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

MySQLでAUTO_INCREMENTの現在値を変更する方法【ALTER文の使い方を解説】

MySQLのAUTO_INCREMENT値を変更するには?

MySQLでは、ALTER文を使用することで、AUTO_INCREMENT(自動インクリメント)の現在のカウント値を自由に変更できます。

基本構文

AUTO_INCREMENTの現在値を変更するための構文は以下のとおりです。

ALTER TABLE テーブル名 AUTO_INCREMENT = 整数値;

動作を確認するためのテーブル作成

それでは、実際に構文の動きを理解するためにテーブルを作成してみましょう。テーブル作成のクエリは以下のとおりです。

mysql> create table changeCurrentAutoIncrementValue
-> (
-> CurrentCount int auto_increment,
-> PRIMARY KEY(CurrentCount)
-> );
Query OK, 0 rows affected (0.60 sec)

レコードの挿入と初期値の確認

次に、テーブルにレコードを挿入します。AUTO_INCREMENTはデフォルトで「1」から開始し、1ずつ増加していきます。レコード挿入のクエリは以下のとおりです。

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.20 sec)

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.15 sec)

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.11 sec)

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.12 sec)

値がどこから開始されているかを確認するために、すべてのレコードを表示してみましょう。

mysql> select *from changeCurrentAutoIncrementValue;

実行結果は以下のとおりです。

+--------------+
| CurrentCount |
+--------------+
| 1 |
| 2 |
| 3 |
| 4 |
+--------------+
4 rows in set (0.00 sec)

上記の出力結果を見ると、AUTO_INCREMENTが「1」から開始され、前の数値に1を加算した値が順番に生成されていることがわかります。

AUTO_INCREMENTの現在値を変更する

それでは、AUTO_INCREMENTの現在値を変更するクエリを見ていきましょう。

mysql> alter table changeCurrentAutoIncrementValue auto_increment = 300;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0

上記のクエリにより、AUTO_INCREMENTの値が変更されました。これ以降、新しい値は「300」から開始されます。既存の最大値(この場合は4)の後に、新しい値が追加されていきます。

変更後の動作確認

再度レコードを挿入して、変更が反映されているか確認してみましょう。

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.15 sec)

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.17 sec)

mysql> insert into changeCurrentAutoIncrementValue values();
Query OK, 1 row affected (0.15 sec)

テーブルからレコードを表示して確認します。

mysql> select *from changeCurrentAutoIncrementValue;

実行結果は以下のとおりです。

+--------------+
| CurrentCount |
+--------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 300 |
| 301 |
| 302 |
+--------------+
7 rows in set (0.00 sec)

出力結果のとおり、AUTO_INCREMENTの値を変更した後は、新しいレコードが「300」から順に採番されていることが確認できます。

注意点

AUTO_INCREMENTの値を変更する際は、既存の最大値より小さい値を指定しても無効になる場合があります。MySQLでは、指定した値が現在の最大値より小さい場合、自動的に「最大値+1」に調整されるため、注意が必要です。また、InnoDBの場合、サーバー再起動時にAUTO_INCREMENT値が再計算される仕様(MySQL 8.0以前)もあるため、運用環境での変更は十分に検証してから行いましょう。

  1. MySQLクエリで日付・時刻の値を秒単位で加算(インクリメント)する方法

    MySQLで日付・時刻(DATETIME)の値に指定した秒数を加算したい場合は、DATE_ADD()関数とINTERVAL句を組み合わせて使用します。この記事では、実際にテーブルを作成し、秒単位で時刻をインクリメントする手順を具体例とともに解説します。 サンプルテーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1867     (     ArrivalTime datetime    &

  2. MySQLで最大の累積値とその出現回数を取得するクエリの書き方

    カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い