MySQLのデータベースで本番公開前にオートインクリメントの連番をリセットする


データベースを利用したWebアプリケーションの開発でテスト段階で格納したデータをそのまま本番公開しようとなると、テスト段階のデータが格納されたまま公開となってしまいます。
公開後の正確なデータを扱う場合はテストの時のデータを削除しておく必要があります。
また、idなどの固有のナンバーをオートインクリメントで自動連番としているテーブルでは、テーブルの中身を削除したとしても自動連番は継続した番号が振られます。

すべてリセットした状態で始めるとなるとデータの削除の他、自動連番もリセットする必要があります。

データベースのテーブルに格納してあるデータはSQL文を実行してすべて削除していくわけですが、テーブル内のデータをすべて削除する方法はTRUNCATE文とDELETE文の2つあります。

TRUNCATE文

TRUNCATEではDROP TABLEを実行した後に再度同じテーブルを作成します。一度テーブルを作成していますのでAUTO_INCREMENTの値は初期化されます。
TRUNCATEはトランザクション外で行われるのでRollbackができません。トランザクションを理解されていない方は、削除したデータを戻すことができないと理解していだだければOKです。

DELETE文

DELETEではTABLEデータを一つ一つ削除していきます。ただしDELETEの場合はデータが削除されるだけなのでAUTO_INCREMENTの値は初期化されません。
DELETEはトランザクション内で行われるのでRollbackすることができます。要するにデータを元に戻すことができます。

トランザクションを簡単に説明すると更新や取り消しといった処理を管理できるものです。

TRUNCATE文とDELETE文の2つを理解したうえでTRUNCATE文は1行だけで実行するシンプルなものですので、ここではDELETE文を利用した方法でコマンド操作とphpMyAdmin操作と両方で説明していきます。

サンプルとしfirstというテーブルに何件かのデータが格納されている場合で話を進めます。

コマンドでの操作


まずは現在格納されているデータをDELETE文すべて削除します。

DELETEで全件のデータ消す

DELETE FROM テーブル名;



サンプルの場合ですと「DELETE FROM first;」とコマンドを打って実行します。

データベースのテーブルのすべてのデータをコマンド操作で削除



最初に一応テーブルの中身をSELECT文で確認しいてます。
DELETE文で削除してから、SELECT文でテーブルの中身を確認するとEmpty setと表示されてすべて削除されてのがわかります。

ただテーブルの中身を削除しただけだと新しくデータを格納する時に継続した連番でデータが入っていきますので、完全にクリアにした状態で始めたい場合はリセットする必要があります。
ここでALTER文を使ってauto_increment(オートインクリメント)の連番をリセットします。

DELETE文ですべてのデータを削除した後に、

ALTER TABLE first auto_increment = 1;



ALTER TABLEで指定したテーブルの定義を変更するように、そしてauto_incrementを1から始めるという設定になります。

auto_increment(オートインクリメント)の連番をコマンド操作でリセット



オートインクリメントをリセットしましたので、次から追加されるレコードの自動連番は1から始まります。
確認のため、INSERT文で1件レコードを追加しています。

SELECT文でテーブルの中身を確認してみるとINSERT文で実行したデータ1件文のレコードが追加され、自動連番のidが1になっているのが確認できます。

もしTRUNCATE文を利用する場合は、

TRUNCATE TABLE テーブル名;


のようにコマンドを打てばOKです。

phpMyAdminでの操作


コマンド操作が苦手という方のためにphpMyAdminでの操作も説明します。

phpMyAdminで操作するデータベースを選択、またはテーブルを選択してから画面上部メニューのSQLタブに進みます。
Run SQL query/queries on database」の入力エリアにSQL文を記述して実行します。(画面右端にあるGoボタンで実行)
SQL文は上記のコマンドでの操作で説明したものと同じです。

まずはDELETE文でテーブル内のすべてのデータを削除します。

データベースのテーブルのすべてのデータをphpMyAdmin操作で削除



続いて、ALTER TABLEでオートインクリメントのリセットして1から始めるようにします。

auto_increment(オートインクリメント)の連番をphpMyAdmin操作でリセット



これでテーブル内のすべてのデータの削除と自動連番のリセットが完了です。
もちろんTRUNCATE文を利用する場合でも同じようにコマンドを実行すればOKです。

以上、データ削除と自動連番(オートインクリメント)をリセットする方法でした。
データベースを利用したWebアプリケーションを本番公開する場合は公開前に事前にテーブル内を確認しておき、データや設定をいろいろリセットしておきましょう。