auto_incrementの番号を振り直す方法

auto_incrementを設定したカラムの番号を1からに戻したいときなど、指定の番号から振り直す方法をまとめました。

目次

auto_incrementはレコードを全件削除しても自動で振り直されない

あるテーブルに登録した全レコードを全件削除しても、新規で追加したレコードは前回から引き継いだ連番で挿入されていきます。

たとえば、下記のようなユーザー情報を扱うテーブルがあったとします。

mysql> describe users;
+-------------+--------------+------+-----+-------------------+-----------------------------+
| Field       | Type         | Null | Key | Default           | Extra                       |
+-------------+--------------+------+-----+-------------------+-----------------------------+
| id          | int          | NO   | PRI | NULL              | auto_increment              |
| name        | varchar(100) | YES  |     | NULL              |                             |
| created_at  | timestamp    | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED           |
| modified_at | timestamp    | YES  |     | NULL              | on update CURRENT_TIMESTAMP |
+-------------+--------------+------+-----+-------------------+-----------------------------+
4 rows in set (0.00 sec)

実際に数件のデータを挿入します。

mysql> insert into users values (0, '鈴木', current_timestamp, current_timestamp);
mysql> insert into users values (0, '田中', current_timestamp, current_timestamp);
mysql> select * from users;
+----+--------+---------------------+---------------------+
| id | name   | created_at          | modified_at         |
+----+--------+---------------------+---------------------+
|  1 | 鈴木   | 2021-10-28 01:02:26 | 2021-10-28 01:02:26 |
|  2 | 田中   | 2021-10-28 01:02:34 | 2021-10-28 01:02:34 |
+----+--------+---------------------+---------------------+
2 rows in set (0.00 sec)

このあと、挿入したデータをいったん消したあと再挿入してみます。

mysql> delete from users;
mysql> insert into users values (0, '佐々木', current_timestamp, current_timestamp);
mysql> select * from users;
+----+-----------+---------------------+---------------------+
| id | name      | created_at          | modified_at         |
+----+-----------+---------------------+---------------------+
|  3 | 佐々木    | 2021-10-28 01:05:41 | 2021-10-28 01:05:41 |
+----+-----------+---------------------+---------------------+
1 row in set (0.00 sec)

IDは1で振り直されず、3で登録されました。

auto_incrementを振り直したいときは、別途設定が必要です。

auto_incrementを指定の番号から振り直す方法

auto_incrementを振り直すときは、以下で可能です。

mysql> alter table users auto_increment = 1;

1から振り直すように設定しました。

もし「10からにしたい」場合は、auto_increment = 1の部分をauto_increment = 10に変更すればOK。

実際に既存のデータを削除した上で、auto_incrementを1から振り直し、データを挿入してみます。

mysql> delete from users;
mysql> alter table users auto_increment = 1;

mysql> insert into users values (0, '加藤', current_timestamp, current_timestamp);

mysql> select * from users;
+----+--------+---------------------+---------------------+
| id | name   | created_at          | modified_at         |
+----+--------+---------------------+---------------------+
|  1 | 加藤   | 2021-10-28 01:11:28 | 2021-10-28 01:11:28 |
+----+--------+---------------------+---------------------+
1 row in set (0.00 sec)

無事にIDが1になっていることが確認できました。

まとめ

テストデータを一括削除して新たにデータを挿入したいときなどは、auto_incrementの番号を振り直したいですよね。

ただデータをdelete from XXXX;で削除しただけではauto_incrementの値は1からに戻りませんので、きちんとalter table文を使って振り直していきましょう。

この記事が気に入ったら
いいね または フォローしてね!

SHARE

コメント

コメントする

目次
閉じる