Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Ultra Light データベース管理とリファレンス » Ultra Light の概要 » Ultra Light のトランザクションとステータスの管理

 

Ultra Light でのトランザクション処理

トランザクションは、自動的に実行される処理の論理セットです。つまり、トランザクションのすべての処理がデータベースに格納されるか、トランザクションの処理が 1 つもデータベースに格納されないかのどちらかです。Ultra Light ランタイムへの Ultra Light アプリケーションのアクセスは直列化されます。複数のトランザクションを同時に開くことは可能ですが、Ultra Light では一度に 1 つのトランザクションしか処理されません。これにより、アプリケーションでは以下の現象が発生しません。

  • トランザクションがブロックされること (デッドロック)。Ultra Light が既存のロー・ロックに基づいて要求をブロックすることはありません。このような事態になった場合、Ultra Light はすぐにエラーを返します。

  • 未処理の変更を上書きすること。トランザクションは、他のトランザクションの未処理の変更を上書きすることはできません。トランザクションによってローが変更されると、Ultra Light は、トランザクションがコミットまたはロールバックされるまでこのローをロックします。ロックによって、他のトランザクションはローを読み込むことはできても、ローを変更できなくなります。

たとえば、A と B という 2 つのアプリケーションが 1 つのデータベースの同じローを読み取っており、どちらもそのデータに基づいて当該ローのカラムの 1 つに入る新しい値を計算するとします。A がローを新しい値で更新し、B が同じローを変更しようとした場合、B はエラーになります。ロックされたローを変更しようとするとエラー SQLCODE SQLE_LOCKED が設定され、削除されたローを変更しようとするとエラー SQLE_NOTFOUND が設定されます。したがって、データの変更を試行した後には SQLCODE 値をチェックするようアプリケーションをプログラムしてください。

エラー処理方法の詳細については、次の項を参照してください。

プログラミングのヒント

C++ API を除くすべての Ultra Light API はオートコミットモードで動作します。一部の API はデフォルトでオートコミットを使用します。

つまり、このデフォルトでは、各トランザクションは操作が終わるたびに自動的にコミットされます。これらのインタフェースのいずれかを使用している場合、複数操作トランザクションを使用するには、オートコミットをオフに設定します。オートコミットをオフに設定する方法は、使用しているプログラミング・インタフェースによって異なります。ほとんどのインタフェースでは、これは接続オブジェクトのプロパティです。

次の項を参照してください。