MySQLでAUTO_INCREMENTをしているテーブルで行などが削除された場合、それ以降の数字はその削除を飛ばした数字になってしまう。

そのままでも特に問題ないっちゃ―ないねんけど、

数字詰めたいわ〜

ってなる気持ちもわからんでもないからその場合の対処法を書いておこかなと思います。

歯抜けしていない場合

1、2、3、4って例えばIDがあって、4の行を削除しましたって場合。
普通やと、次は5が出てくる。
何でか言うと、このテーブルのAUTO_INCREMENT自体に数字がカウントされていて、それが次は5でっせ!ってなってるからです。

なので、下記のようにそのカウントを変更してあげれば大丈夫です!

ALTER TABLE {テーブル名} AUTO_INCREMENT = 1;

AUTO_INCREMENT = 1 ってしているのは、そうすることによって、今ある最終の番号の次からカウントされるようになります。

このAUTO_INCREMENT部分のところの数字は任意に指定できるので、好きな数字から始めることも可能。

例えば、
1、2、3ってあって、AUTO_INCREMENTを8に設定すると、

ALTER TABLE {テーブル名} AUTO_INCREMENT = 8;

1、2、3、8ってなります。

歯抜けを直したい場合

1、2、5、8のような感じで数字がところどころ飛んでいる場合は、ユーザー定義変数を使って詰めることができます。書き方はこんな感じです。

SET @i = 0;
UPDATE {テーブル名} SET {AUTO_INCREMETしているカラム名} = (@i := @i +1);

コードの説明:
SET @i = 0; がユーザー定義変数になります。
ユーザー定義変数を設定した後、 UPDATE{AUTO_INCREMETしているカラム名} の値を揃えています。

これで、1から連番になります。

ただ、この後そのままデータを追加していっても AUTO_INCREMENT の値が UPDATE する前の状態のままなのでそれを直す必要があります。直し方は上記で行ったコマンドを打ちます。

ALTER TABLE {テーブル名} AUTO_INCREMENT = 1;

まとめると、

まとめたコード

SET @i = 0;
UPDATE {テーブル名} SET {AUTO_INCREMETしているカラム名} = (@i := @i +1);
ALTER TABLE {テーブル名} AUTO_INCREMENT = 1;

になります。