SQLiteからMySQLに差し替える作業を行っており、主キー(Integer)自動採番の動作の違いで困っています。
以下の検討はしましたが、他に良いアイデアは無いでしょうか?
テーブルの特性は以下のとおりです。
- Webアプリのユーザーが日々データ(行)を追加する
- 古くなると自動で削除する
- したがって、総行数はそれほど多くはならないが、追加、削除の頻度は高い
SQLiteの自動採番
行を削除するなどして欠番になっているIDは、Insert時に再利用されます。
したがって、行数さえIntegerの値域に収まっていれば問題ありません。
On an INSERT, if the ROWID or INTEGER PRIMARY KEY column is not explicitly given a value, then it will be filled automatically with an unused integer, usually one more than the largest ROWID currently in use. This is true regardless of whether or not the AUTOINCREMENT keyword is used.
https://www.sqlite.org/autoinc.html
MySQLの自動採番(AUTO_INCREMENT)
行を削除するなどして欠番になっているIDは、再利用されず欠番となります。
追加・削除の多いテーブルでは使い切ってしまう恐れがあります。
検討した対策
- AUTO_INCREMENTの値をリセットする → テーブルを一度空にする以外に方法が見つかりませんでした。
- 主キーをBIGINTにすることで、上限に達するまでの期間を延ばす
環境
- MySQL 8.0.19
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/23 14:14