MySQL で AUTO_INCREMENT の値をリセットする方法
テーブルのレコード数が増えてきて、レコードを大量に削除した後で、AUTO_INCREMENT の値を現在のレコードに合わせてリセットしたいような時ありませんか?
ここでは MySQL で AUTO_INCREMENT の値をリセットする方法をご説明します。
MySQL で現在の AUTO_INCREMENT の値を確認する
まずは、あるテーブルの現在の AUTO_INCREMENT の値を確認してみましょう。
test_db と言う名前のデータベースに、以下のようなシンプルな table1 というテーブルがあって、10 レコードが入っています。
CREATE TABLE table1 (
id INT NOT NULL AUTO_INCREMENT,
value1 VARCHAR(20) NULL,
PRIMARY KEY (id)
);
テーブルの現在の AUTO_INCREMENT の値は次のクエリーで確認できます。
ANALYZE TABLE テーブル名;
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'データベース名'
AND TABLE_NAME = 'テーブル名';
まず、ANALYZE TABLE 文でテーブルの情報を最新のものに更新します。
そして、INFORMATION_SCHEMA.TABLES から、データベース名とテーブル名を指定して、AUTO_INCREMENT の値を取得しています。
以下のクエリーを実行して、test_db データベースの table1 テーブルの AUTO_INCREMENT の値を確認します。
ANALYZE TABLE table1;
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test_db'
AND TABLE_NAME = 'table1';
AUTO_INCREMENT の値が 11 であることがわかりました。
MySQL で AUTO_INCREMENT の値をリセットする
ここで、table1 テーブルの id が 4 以上のレコードを削除しました。
現在のこのテーブルの AUTO_INCREMENT の値は 11 なので、次のデータをインサートすると id は 11 になります。
こんな状況で次の id の値を 11 ではなく、4 にしたいような時、AUTO_INCREMENT の値を現在の最大値 + 1 にリセットすることができます。
ALTER TABLE 文で、AUTO_INCREMENT に設定しようとした値が、AUTO_INCREMENT が設定されているカラムの最大値 + 1 より小さい場合は、AUTO_INCREMENT の値が最大値 + 1 に設定されます。
それを使って以下のクエリーで、AUTO_INCREMENT を現在の最大値 + 1 にリセットすることができます。
ALTER TABLE テーブル名 AUTO_INCREMENT = 1;
次のクエリーを実行して、table1 の AUTO_INCREMENT の値をリセットし、もう一度 AUTO_INCREMENT の値を確認してみます。
ALTER TABLE table1 AUTO_INCREMENT = 1;
AUTO_INCREMENT の値が 4 になっていますね。
試しに 1 レコード挿入すると、id に 4 が入りました。
以上、MySQL で AUTO_INCREMENT の値をリセットする方法をご説明しました。