1

次の請求書の累進番号を手動で設定する必要がある請求書テーブル (innoDB) があります。私のコードは今

SELECT MAX(invoice_n) FROM invoices WHERE invoice_y = 2013

次に、新しいinvoice_n = max + 1を入れてレコードを定期的に保存します。invoice_n-invoice_yにUNIQUEインデックスがあり、データベースエラーをログに記録しているため、キーエントリエラーが重複していることがわかります。ユーザーが接続しました。請求書が生成されるまで続くループにコードを入れましたが、特にトランザクションを使用して、より洗練されたソリューションがあると思います。少し読んだのですが、トランザクションで結果を達成する方法がわかりません。

何か助けはありますか?

4

1 に答える 1

0

列定義で「AUTO_INCREMENT」を使用できます。挿入に失敗すると、数値間にギャップが生じます。

別の方法として、年ごとの最後のインデックスを含むテーブルを作成し (コメントを参照)、次の手順に従います。

  1. 取引を開始する
  2. 行ごとの最後のインデックスの更新を選択し、1 つずつインクリメントします
  3. 新しい請求書を挿入する
  4. トランザクションをコミットする

いくつかのリンク:

もう1つは、「楽観的なアプローチ」を使用して、キーの重複が原因で失敗した場合に選択と挿入を繰り返すことです。

これがお役に立てば幸いです。コメントは大歓迎です。

于 2013-01-23T00:36:42.027 に答える