MySQLでテーブルのデータを削除した後にAUTO_INCREMENTを1から再開させる方法
MySQLでデータ削除後にAUTO_INCREMENTを1に戻す方法
MySQLでは、DELETE文でレコードを削除してもAUTO_INCREMENTの値はリセットされず、次に挿入されるレコードには続きの番号が割り当てられます。自動インクリメントの値を1に戻したい場合は、TRUNCATE TABLEコマンドを使用します。本記事では、実際のSQL例を使ってその動作を確認していきます。
検証用テーブルの作成
まず、テーブルを作成します。
mysql> create table DemoTable1796
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable1796(StudentName) values('Chris Brown');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1796(StudentName) values('David Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)レコードの確認
SELECT文ですべてのレコードを表示します。
mysql> select * from DemoTable1796;
実行結果は以下のとおりです。
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 1 | Chris Brown | | 2 | David Miller | | 3 | John Doe | +-----------+--------------+ 3 rows in set (0.00 sec)
DELETE文で削除した場合の挙動
まず、DELETE文ですべてのレコードを削除してみます。
mysql> delete from DemoTable1796; Query OK, 3 rows affected (0.00 sec)
この状態で新しいレコードを挿入するとどうなるでしょうか。
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)
mysql> select * from DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 4 | John Doe |
+-----------+-------------+
1 row in set (0.00 sec)ご覧のとおり、DELETE文で全行を削除しても、新しく挿入されたレコードには「4」というIDが割り当てられました。これはDELETE文ではAUTO_INCREMENTのカウンターがリセットされないためです。
TRUNCATE TABLEでカウンターをリセットする
AUTO_INCREMENTを1に戻すには、TRUNCATE TABLEコマンドを使用します。
mysql> truncate table DemoTable1796; Query OK, 0 rows affected (0.00 sec)
TRUNCATE実行後にもう一度レコードを挿入して確認してみましょう。
mysql> insert into DemoTable1796(StudentName) values('John Doe');
Query OK, 1 row affected (0.00 sec)
mysql> select * from DemoTable1796;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | John Doe |
+-----------+-------------+
1 row in set (0.00 sec)今度は新しいレコードに「1」から採番されていることが確認できました。TRUNCATE TABLEはテーブル内のすべての行を削除すると同時に、AUTO_INCREMENTカウンターも初期化するためです。
補足:TRUNCATE以外のリセット方法
なお、WHERE句で一部の行だけを削除したい場合など、TRUNCATEが使えないケースでは、ALTER TABLE文で明示的にカウンターをリセットすることも可能です。
mysql> ALTER TABLE DemoTable1796 AUTO_INCREMENT = 1;
用途に応じてTRUNCATE TABLEとALTER TABLEを使い分けることで、柔軟にIDの採番を管理できます。
-
MySQL Workbenchを使ってサーバー上のデータベースからERモデルを取得する方法
サーバー上のデータベースからERモデル(ER図)を取得するには、まずMySQL Workbenchを起動します。起動直後の画面は以下のとおりです。1. リバースエンジニアリングの開始次に、メニューバーから「Database」メニューを選択し、「Reverse Engineer」をクリックします。Database -> Reverse Engineer2. データベースへの接続すると、下のスクリーンショットのようなウィザードが表示されます。ここでデータベースのパスワードを入力し、「OK」ボタンを2回押してください。3. ウィザードの進行「OK」ボタンを押すと、次のウィザード画面に移行します
-
MySQLで削除後のAUTO_INCREMENTフィールドを振り直す方法|1,3,5を1,2,3に連番化する
MySQLでは、行を削除した後もAUTO_INCREMENTの値は欠番のまま残ります。例えば、IDが「1,2,3,4,5」のテーブルから「2」と「4」を削除すると、残るのは「1,3,5」です。この記事では、この欠番を詰めて「1,2,3」という連番に振り直す方法を、実際のSQL文と実行結果とともにわかりやすく解説します。 1. サンプルテーブルを作成する まず、AUTO_INCREMENTフィールドを持つテーブルを作成します。 mysql> create table DemoTable1955 ( UserId int NOT NULL AUTO_INCREMENT,