回答編集履歴
2
AUTO_INCREMENTについて説明追加
answer
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
勝手にIDが増えていくのはIDフィールドに[AUTO_INCREMENT属性](https://dev.mysql.com/doc/refman/5.6/ja/example-auto-increment.html)
|
2
2
|
が付与されているからと思われます。
|
3
3
|
|
4
|
+
AUTO_INCREMENT属性がついているIDの場合、テーブル自体に次に振られるべきIDが記録されており、insertされる度に1増えていき、レコードが削除されても減ることはありません。
|
5
|
+
|
6
|
+
なのでたとえば、
|
7
|
+
3件追加→3件削除→1件追加 とした場合、テーブルに残るのはID4のレコードになります。
|
8
|
+
|
4
9
|
よくある解決方法としては、
|
5
10
|
0. IDに欠番が発生することを気にしない
|
6
11
|
下手にIDを再利用すると色々面倒なこと(例えば、このIDを他のテーブルでのデータ連結に使用している場合)が起こる可能性が増えるので、IDに欠番が発生しても気にしないという方法はよくあります。(個人的には特に理由がない限りは一番お勧めです)
|
1
締めを追記
answer
CHANGED
@@ -7,4 +7,7 @@
|
|
7
7
|
0. 論理削除する。
|
8
8
|
例えば、is_deleteフィールドを設けて、削除したことにしたいレコードについてis_deleteフィールドに1を入れてupdateする。といった方法です。これは今回考えられている方法に近いと思います。これもよくある実装かと思います。
|
9
9
|
0. 自力でIDを採番する
|
10
|
-
insertするタイミングで空いているIDを自力で探して、IDを指定してinsertします。1番目のお勧め理由によって個人的には嫌いな方法です。
|
10
|
+
deleteは現状のまま行い、insertするタイミングで空いているIDを自力で探して、IDを指定してinsertします。1番目のお勧め理由によって個人的には嫌いな方法です。
|
11
|
+
0. deleteしたタイミングでIDを詰める。途中のIDを削除した場合に、それより後ろのIDをすべて-1してupdateします。普通はやらないです。
|
12
|
+
|
13
|
+
あたりかなと思います。
|