1

請求書を含むテーブルがあります。これらの請求書は、私が作成した VB.NET プログラムを介して挿入されます。自動インクリメントを使用すると、請求書がその請求書 ID を取得します。

私は今、1055 1056 1057のようなinvoiceidを持っています...

請求書を生成する別のデータベース (別の購入したソフトウェア プログラムから) もあり、cron ジョブを使用して特定の請求書をメイン テーブルにインポートしますが、プレフィックス 99 が付けられます。これらの請求書は同じ順序ではありません。それらに番号を付けるために自動インクリメントは使用しませんが、元の ID (他のデータベースから) + 99 プレフィックスを使用します。私のメインテーブルには、次のようなセカンダリデータベースからのinvoiceidがあります。

992013055 992013064 992013078

したがって、これにより、メインテーブルは次のようになります。

992013055 1055 1056 992013064 1057 992013078 ...

ここで問題は、自動インクリメントが「メイン」シーケンスにのみ従うようにすることです。上記の例では、次の自動インクリメント値は 1058 である必要がありますが、通常の自動インクリメントを使用すると 992013079 になります。これを強制する方法はありますか? または、「ALTER TABLE 請求書 AUTO_INCREMENT=bla +1」のように、cron ジョブの後に自動インクリメント値を「リセット」する必要があります。「bla」は、99 で始まらない列の最高値を取得するための新しい選択である必要があると思いますが、これを行う方法がわかりません。もちろん、請求書が 9900 になると、これは問題になります。

ありがとうございました

4

2 に答える 2

0

いいえ、できません。ALTER TABLE invoices AUTO_INCREMENT=bla +1コマンドを試しても、 MySQL は の値AUTO_INCREMENTが列の最大値よりも高いことを確認するため、機能しません。

基本的に、自動インクリメントされた列の値を主キー以外には使用しないでください。そのため、これらの値が何であるか、およびそれらが従う順序を実際に気にする必要はありません。結局のところ、誰もそれらを見ることはなく、コンピューターによってのみ使用されます。

ただし、これらの値をエンド ユーザーに表示されるものに使用した場合は、ユーザーは請求が今から開始されるという事実に適応する必要があります99。それか、番号を付け直す必要があります。これは大変な作業であり、データにエラーが発生する可能性があります。

于 2013-08-27T20:11:22.493 に答える