MySQLのid番号 リセット方法
MySQLには初期設定でauto-increment機能が設定されています。
簡単にいうと「自動連番機能」です。
ただ番号間にあるレコードを消すとそのid番号のみが欠番となったまま、無視され、最後の番号から連番されてしまうため、テーブル管理において不都合なことが生じる場合があります。
そこで本記事では
###「id番号を1から振りなおす方法」をご紹介いたします。
方法のみ知りたい方は以下のリンクをクリック
方法へジャンプ
状況:
たとえばこんな感じのテーブルがあり、id番号が順番に振られています。
id | name |
---|---|
1 | ANA |
2 | DELTA |
3 | JAL |
4 | UNITED |
5 | VANILA |
6 | PEACH |
しかし、いくつかレコード削除などによって欠番が生じると下のような順番になります。
id | name |
---|---|
1 | ANA |
3 | JAL |
4 | UNITED |
6 | PEACH |
上の状態でさらにレコードが追加となると下のような連番となります
7 | Sky Mark |
8 | Jet star |
歯抜になってしまったid:2と5は欠番となったまま。
静的なテーブルでこのid番号を1から振り直す方法がないものか探した結果、なんとかできる方法に行き着いたのでご紹介します。
リセット方法
ターミナル上で
1.mysqlに入る(コピペするときは$は除いてください)
$ mysql -u root -p
パスワードは基本的には空のままEnterでOK
2.データベースを選択
mysql> use データベース名
3.テーブルのidを定義し直す
mysql> set @n:=0;
mysql> update`テーブル名` set id=@n:=@n+1;
4.確認
mysql> select*from テーブル名;
以上の操作でidの番号を振り直すことができたはずです。
基本的にはレコードが入っているテーブルにて以上の方法を試してみてください。レコード追加のない静的なテーブルでは基本的に以上の方法でOKです。
がしかし、
レコードが追加されるようなテーブルでは、上記リセットをかけても次のid番号は、もともと最後に入っていたレコードの次の番号からになってしまうため、mysqlのauto_increment自体をリセットする必要があります。
方法2
そんな時は以下の2つの方法を状況に応じて試してみてください。
1.レコードがすべて空の状態からリセットしたい
レコードが空であれば、
ALTER TABLE `テーブル名` auto_increment = 1;
でOK。初めのレコードをid:1で始めると言う意味です。
2.レコードが複数存在する状態で最後のidの次から連番にしたい
本記事上部の連番リセット方法でレコード番号を振り直しをしたあと、
mysql> select*from テーブル名;
でid番号を振り直したテーブルを確認し、例えば下のテーブルなら本記事のリセットのみだとレコードを追加した時、真ん中のような連番になってしまいます。
一番右のようにするためにはmysqlのauto_increment(連番機能)の番号を更新する必要があります。
このテーブルのauto_incrementも修正しよう。
ALTER TABLE `テーブル名` auto_increment = 開始したいid番号;
つまり今回の場合であれば
ALTER TABLE `テーブル名` auto_increment = 5;
でOK。レコードを追加した際、5,6,7,,,,,と連番になるはずです。
****************************************
プログラミング初級者が自身の備忘録も兼ねて書いた記事ですのでご指摘等ありましたら気軽にコメントください。なにか同様の問題でお困りの方にお役に立てたら嬉しいです。
テーブルのリレーションによっては本記事の番号振り直し自体がエラーになる場合がありますので、テーブル同士のリレーションおよび関係性を確認して記述の修正、一時コメントアウト等適宜行い、実行してください。