非常に問題のある問題に遭遇しました。オンライン注文(現実世界で起こる出来事)のシステムを開発しています。ユーザーが私のサイトでイベントを注文しています (実装は MYSQL DB に書き込む .NET Web サービスによるものです)。関連する 2 つのテーブルは、EVENTS と EVENTonFIELD です (FIELD はユーザーが注文しているリソースです)。(ユーザーは単一または複数のリソースを注文できます)
私の問題は、同じ時間に同じリソースを注文できないようにすることです (おそらく、WS への並列呼び出しによって)。実装は、EVENTS および EVENTonFIELD への挿入 (他のロジックの中でも) を含む MYSQL .NET コネクタ (C#) トランザクションです。
トランザクション A とトランザクション B (両方とも同一: 同じユーザー X、リソース Y、時間 Z) がある状況に陥りました。
トランザクション A が実行されます (リソースが利用可能であることを確認した後)。この間 (tn A はまだコミットされていません)、トランザクション B が実行されます (リソースが使用可能かどうかを検証すると、tn A がまだコミットされていないため、リソースが使用可能であることがわかります)。次に - A がコミットされ、B がコミットされ、次のようになります。
このユーザーにはダブルイベントがあります..
ここでは主キーを使用できません。これは、場合によってはリソースの二重順序付けを許可するためです。そのようなケースを防ぐ方法はありますか?
私が考えた唯一のことは、トランザクションBの間に、どういうわけか並列トランザクション(A)も読んで、衝突があるかどうかをチェックすることです..これは可能ですか?
ありがとう!!