0

int(7) ZEROFILLテーブルに 10 000 000 行を含めるのに十分な 0000001、0000002、0000003 などを取得するために、7 桁の自動インクリメント ID フィールド ( ) を定義しました。最初はすべてOKでした。次に、フィールドが範囲全体を「スキップ」することに気付きました。たとえば、0000100 から 0000200 に直接移動します。 で許可された最後の値である 9999999 に直接移動すると、事態は非常に複雑になりint(7)ます。で利用可能な値の 0.005% しか使用していませんでしたint(7)

問題は、このフィールドに 7 桁のフォーマットが本当に必要なことです。

次に使用可能な値をフィールドに強制的に使用させる方法はありますか?

ご協力いただきありがとうございます!

EDIT:参考までに、行の定義はint(7) UNSIGNED ZEROFILL AUTO_INCREMENT

4

3 に答える 3

1

を使用AUTO_INCREMENTするとうまくいくはずです。このSQLFiddle の例を参照してください。これはデータ表現のみを目的としているため、使用ZEROFILLしてもデータには影響しません。

于 2012-08-20T10:12:53.790 に答える
0

あなたの問題を完全に理解しているかどうかはわかりませんが、それは AUTO_INCREMENT がどのように機能するかではありません。これは基本的にカウンターであり、そのため、次に使用可能な値を検索しません。カウンターをインクリメントするだけです。

実際にはどういう意味ですか?1、2、3... という連続した値があるかもしれませんが、より大きな値を手動で挿入するとすぐに (例: 1000)、カウンタがインクリメントされるため、次の値は になります1001。行を削除しても、カウンターは のまま1001です。リセットする唯一の方法は、ALTER TABLE ステートメントを発行することです。

それが望ましい動作でない場合、AUTO_INCREMENT はジョブに適したツールではありません。

于 2012-08-20T10:12:41.047 に答える