トランザクション (ODBC)

トランザクション は、1 つのアトミック操作として実行される作業単位です。つまり、操作全体が成功または失敗します。 たとえば、ある銀行口座から別の銀行口座に送金することを考えてみましょう。 これは、最初の口座からお金を引き出し、2 番目の口座に入金する 2 つのステップを踏むことになります。 両方の手順が成功することが重要です。一方の手順が成功し、もう一方が失敗することは許容されません。 トランザクションをサポートするデータベースは、これを保証できます。

トランザクションは、コミット または ロールバック されることで完了します。 トランザクションがコミットされると、そのトランザクションで行われた変更は永続的なものになります。 トランザクションがロールバックされると、影響を受ける行は、トランザクションが開始される前の状態に戻されます。 アカウント転送の例を拡張して、アプリケーションは 1 つの SQL ステートメントを実行して最初のアカウントを借方にし、別の SQL ステートメントを実行して 2 番目のアカウントにクレジットを与えます。 両方のステートメントが成功すると、アプリケーションはトランザクションをコミットします。 ただし、いずれかのステートメントが何らかの理由で失敗した場合、アプリケーションはトランザクションをロールバックします。 どちらの場合にも、アプリケーションはトランザクションの終了時に一貫した状態を保証します。

1 つのトランザクションには、異なる時間に発生する複数のデータベース操作が含まれる場合があります。 他のトランザクションが中間結果に完全にアクセスしていた場合、トランザクションは相互に干渉する可能性があります。 たとえば、あるトランザクションが行を挿入し、2 番目のトランザクションがその行を読み取り、最初のトランザクションがロールバックされたとします。 ここで、2 番目のトランザクションには、存在しない行のデータが含まれるようになりました。

この問題を解決するには、トランザクションを互いに分離するさまざまなスキームがあります。 トランザクションの分離 は、通常、複数のトランザクションが同じ行を同時に使用することを妨げる行をロックすることによって実現されます。 一部のデータベースでは、行をロックすると、他の行もロックされる場合があります。

トランザクションの分離が進むと、コンカレンシー、つまり、2 つのトランザクションで同じデータを同時に使用する能力が低下します。 詳細については、「トランザクション分離レベルの設定」を参照してください。

このセクションでは、次のトピックを扱います。