理想的には、トランザクションは シリアル化可能である必要があります。 トランザクションは、トランザクションを同時に実行した結果が、連続して実行された結果と同じ場合、つまり 1 つずつシリアル化可能であると言われます。 どのトランザクションが最初に実行されるかは重要ではなく、結果にトランザクションの混在が反映されないことだけが重要です。
たとえば、トランザクション A がデータ値に 2 を乗算し、トランザクション B がデータ値に 1 を加算するとします。 次に、0 と 10 の 2 つのデータ値があるとします。 これらのトランザクションが 1 つずつ実行される場合、トランザクション A が最初に実行される場合は新しい値が 1 と 21 になり、トランザクション B が最初に実行される場合は 2 と 22 になります。 しかし、2 つのトランザクションの実行順序が値ごとに異なる場合はどうでしょうか。 トランザクション A が最初の値で最初に実行され、トランザクション B が 2 番目の値で最初に実行される場合、新しい値は 1 と 22 になります。 この順序が逆の場合、新しい値は 2 と 21 になります。 1、21、2、22 のみが可能な結果である場合、トランザクションはシリアル化できます。 1、22、または 21 が可能な結果である場合、トランザクションはシリアル化できません。
では、シリアル化可能性が望ましいのはなぜですか? つまり、次のトランザクションが開始される前に 1 つのトランザクションが完了しているように見えるのはなぜですか。 次の問題を検討してください。 営業担当者が注文を入力すると同時に、事務員が請求書を送信しています。 販売員が X 社から注文を入力したが、コミットしていないとします。セールスマンはまだX社の担当者と話しています。書記は、開いているすべての注文のリストを要求し、X 社の注文を検出して請求書を送信します。 X 社の担当者が注文を変更することを決定したので、営業マンはトランザクションをコミットする前に変更します。 X 社が正しくない請求書を受け取ります。
セールスマンと事務員のトランザクションがシリアル化可能な場合、この問題は発生しませんでした。 営業マンのトランザクションは、事務員のトランザクションが開始される前に完了したと考えられます。この場合、事務員が正しい請求書を送信したか、販売員のトランザクションが開始される前に事務員のトランザクションが完了したことになります。この場合、事務担当者は X 社に請求書をまったく送信しなかったことになります。