4

私は最近、サーバーの再起動時にInnoDB が値を再計算する方法のために、ID リストの上限にあるレコードの ID が再利用される可能性があることを読みました。AUTO_INCREMENT

ユーザーが削除されると、ID に関連付けられているすべてのものが他のテーブルからも削除されるため、通常、これは問題になりません。

しかし、過去の会話が保持されるように、 「投稿者= ユーザー #123= 」というラベルを付けて、故意にフォーラムの投稿を孤立させたままにしています。明らかに、ID が再利用された場合、これは問題になります。

ID がこのように再利用される可能性を低くするのに十分な数の新規ユーザーが常にいたため、これまでこの問題が発生したことはありません。しかし、私の新しいプロジェクトでは、サインアップはめったになく、非アクティブなユーザーの削除が頻繁に発生し (特に、「オープン アルファ」アカウントはプレビューとして 3 日間しか存続しないため)、そのような ID の再利用は現在 3 回発生しています。

AUTO_INCREMENT内部値に依存する代わりに、他の場所に正しい値を保存し、それを使用することで、問題を「修正」しました。InnoDB に実際の最後の値を記憶させる実際の方法はありますか?

4

1 に答える 1

1

5.5 のドキュメントでは、自動インクリメント値を別の場所に保存することを提案しています。

別の解決策は、SEQUENCE をエミュレートして、実際のテーブル自体で自動インクリメントを使用しないようにすることです。これはSO何度も議論されています。MYSQL Performance ブログで言及されています。

他の RDBMS にはないさらに別の MySQL データのねじ込み...

于 2012-04-17T07:28:01.747 に答える