条件に応じて、2 つの異なるテーブルに行を挿入しています。
たとえば、stories
検討中の 2 つのフィールドで名前が付けられたテーブルがあるとします:
( story_id and comments_count
)
および他の 2 つのテーブル:
regcomments (comment_id, story_id, comment_text)
unregcomments (comment_id, story_id, comment_text)
ここで、任意の に新しいコメントを挿入する前に、が 100 未満story_id
かどうかを確認したいだけです。そうであれば、行を に挿入する必要があります。comments_count
regcomments
unregcomments
これが私がそれを行った方法の疑似コードです:
select comments_count from stories where story_id = x
if comment_count<100
insert into regcomments
else
insert into unregcomments
複数のユーザーがこのスクリプトにアクセスしている場合、これが失敗する可能性はありますか? たとえば、ストーリーには 99 のコメントがあります。2 人のユーザーがこの関数をまったく同時に呼び出します。最初の選択クエリは両方に対して同時に実行され、両方とも 99 を取得します。したがって、両方の挿入が regcomments に対して行われ、regcomments のカウントが 101 になります。これは私のビジネス ルールに反します。誰もが、物事がどのように進むか、何らかの考えを持っています。または、このシナリオをどのように処理する必要があるかについてのアイデア。(なぜ私が2つのテーブルを使用しているのか聞かないでください:P とにかく)