そうしないでください。
この理由は、トランザクションがMVCCを利用して、更新されたすべてのデータが実際にはインプレース更新ではなく、単に別の場所に挿入されるメカニズムを利用しているためです。
MVCCは、メモリやストレージスペースを割り当てて、を発行するまでディスクにコミットせずに送信したすべての変更を蓄積して操作することを意味しますCOMMIT
。
つまり、スクリプト全体が実行されている間、すべての変更はスクリプトが終了するまで保存されます。また、トランザクション中に変更しようとしたすべてのレコードは「作業中」としてマークされているため、他のプロセス/スレッドはこのデータがまもなく無効になることを知ることができます。
スクリプトの全長にわたって「作業中」とマークされた特定のデータがあるということは、他の同時更新ではフラグが表示され、「これが完了するまで待機する必要があるため、最新のデータを取得します」と表示されることを意味します。
これにはSELECTS
、分離レベルに依存することも含まれます。「作業中」とマークされているものを選択すると、結合したい一部のテーブルにすでに更新されたデータが含まれている可能性がありますが、他のテーブルはまだ更新されていないため、読み取りがダーティになる可能性があります。
操作のトランザクション性とアトミック性は望ましいですが、コストがかかります。必要な場所で使用してください。はい、つまり、競合状態が発生する可能性のある場所を特定するための作業が増えることを意味します。競合状態が発生した場合でも、それらが本当に重要であるか、「ある程度の」データ損失/混合が許容できるかどうかを判断する必要があります。
ログと訪問カウンターおよびその他の統計を使用して、サイト全体の速度を下げますか?または、その情報の品質は速度のために犠牲になります(分析スーツでない限り、時折衝突する余裕があります)。
座席予約アプリケーションで失火し、座席数が0になった後でも、より多くのユーザーが座席を取得できるようにしますか?もちろんそうではありません-ここでは、トランザクションと分離レベルを活用して、決して起こらないようにします。