フールドのデータを連番に更新するSQL

あるMySQLデータベースを更新するために、ローカルにデータベースを複製してここで更新したデータを差し戻すという方法をとったことがある。差し戻すときに追加データの場合、auto-incrementに指定してあるフィールドの値はよく確認しないと、ローカルで作業中にオリジナルのデータベースでもデータの追加が行なわれてしまっていた場合にIDがバッティングしてしまう。

たいていの場合はオリジナルのデータベースでその時点でのauto-incrementの最大値を確認してそれ以上になるようにローカルのデータベースのauto-increment値に一定値を加算するんだけど、今回はちょっとちがうことをしたくなった。

オリジナルのデータベースではデータ削除によってauto-increment値がとびとびになっている。ま、それはまったく構わないんだけど、大きく連番が空いている部分がある。今回のシステムではいったん削除したauto-increment値にまったく関係ないデータが入力されてもシステムの動作に全く問題ないので、追加分のデータはこのauto-increment値が連続で大きく空きができている部分に追加することにした。

そのためにはローカルで追加したデータのauto-increment値をある値からの連番に振りなおす必要がある。

で、そのためのSQL文が次の2行

SET @i := 0;
UPDATE `テーブル名` SET `カラム名` = (@i := @i +1) WHERE [条件]

これでカラムのデータを1からの連番に振りなおすことができる。