2012-04-06 8 views
4

私は約2,000,000エントリのmysqlテーブルを持っています。主キーは自動インクリメントです。しかし、ある時点で、自動インクリメント値は突然(約2,000,000)から最大整数値(2,147,483,647)に急増しました。言うまでもなく、このテーブルへの後続の挿入はすべて失敗しました。私が気付いたとき、私は主キータイプをintからbigintに変更しました。今のところうまく動作します。MySQL自動インクリメントIDが突然MAXINTにジャンプしましたが、何が原因でしょうか?

私の質問は、なぜこれが起こったのでしょうか?そして、将来起こることを避けるために私が取ることができる予防措置はありますか?

+2

また、 'unsigned'を使うと、否定的なauto_incrementsが必要なのか疑いがあります。 –

答えて

6

挿入に失敗すると、依然として自動インクリメント列が増加する可能性があります。あなたのプログラムが無限ループで失敗した場合、限界に達する可能性があります。

自動インクリメントをプログラムによって特定の値に設定することもできます。 auto_incrementのみ昇順で動作しますので、あなたが自動インクリメントの列に乱数を入力した場合

をBE-ことができ、このため

ALTER TABLE yourtable AUTO_INCREMENT = 12345; 
0

一つの理由は、それは可能性があります。だから、あなたが最大限に近い数を挿入したとき、それはすぐに最大限に達し、あなたは何も入力することができませんでした。

+0

これは意味をなさない。自動インクリメントが常に増加するので、乱数が挿入されたときに最後まで飛び越したと言っていますか?それがあなたが言っているものなら、それは正しくありません。 –

+0

@DMac申し訳ありませんが、私はいくつかの言葉を間違えたので、あなたは私の答えを誤解しました。 –

+0

@DMac - 彼はそれが少し不器用であると説明しましたが、彼は正しいですが、答えは失敗した挿入があって、auto_incrementが生成する数字を使い果たした可能性が最も高いです。回答はそれ自体悪くはないので、このdownvoteに対抗するためにUpvoting。 –

関連する問題