2012-04-17 7 views
3

最近、readは、サーバが再起動したときにInnoDBがの値を再計算するため、IDリストのハイエンドのレコードがIDを再利用できる可能性があります。InnoDBでauto_increment IDをリサイクルしない方法

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

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

このような方法でIDを再利用する可能性が低い新しいユーザが常に存在するため、これまでにこの問題は発生しませんでした。しかし、私の新しいプロジェクトでは、サインアップはまれであり、非アクティブなユーザーの削除が頻繁に行われています(特に、「Open Alpha」アカウントはプレビューとして3日間しか使用できません)。

AUTO_INCREMENTの正しい値を保存し、内部値に頼るのではなく、その値を使用して問題を修正しました。 InnoDBに実際の最後の値を記憶させる実際の方法はありますか?

+4

ではなくアカウントレコードの削除を持っている「ユーザ#11」に名前を変更し、「設定しないことをねじ込みますその上に「削除済み」フラグがありますか?その後、参照整合性を維持し(FKを使用することもできます)、IDが再利用される心配はありません。 –

答えて

1

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

代替の解決策は、実際のテーブル自体で自動インクリメントを使用しないようにSEQUENCEをエミュレートすることです。これはdiscussed on SO beforeagainです。 MYSQL Performance blog mentions it

さらに別のMySQLのデータは、他のRDBMSは、アウトその理由だけでは明らかではない、...

+1

ポインタをありがとう!([0x3A28213A'、 '0x6339392C'、' 0x7363682E'](http://xkcd.com/138/))! –

+0

@Kolinkリンクを理解できませんでしたか?彼らが暗示するもの –

+0

それをクリックしてください。それは冗談だ... –

関連する問題