新しい領収書を作成するために、ユーザーが購入するたびにテーブルreceipt_counter
から現在最高の番号を取得するというクエリがあります。毎年リセットされるため、テーブル内で一意ではありません。 receipts
receipt_counter
receipt_counter
receipt_label
のように見える生成に使用される単なる整数です"pos_id"-"receipt_counter"
。
人々が同じ POS で同時に商品を購入できる可能性があります ( pos_id
)。
new を取得する関数はreceipt_counter
次のようになります。
SELECT (MAX(receipt_counter) + 1) as next_receipt_counter FROM receipts
問題は、複数の人が同時に製品を購入しているときに、新しいレシートの生成をトリガーすることです (レシート番号とともに)。レシート カウンターの取得と新しいレシートの挿入の間に遅延があるため、衝突が発生することがあります (複数の人が同じレシート番号を取得します)。 DB。
この種の問題に対処するためのベスト プラクティスはありますか? ある種のデッドロックを使用する必要がありますか、それとも最初のアイデアに欠陥があり、受信カウンターを生成するための戦術をすべて変更する必要がありますか?
EDIT:recipe_counterは、ギャップのない連番である必要があります。