テーブルの読書き両方を行います。トランザクションでは読込みのみ行います。他のトランザクションとコンフリクトした場合、アクセスが待たされます。他のトランザクションとコンフリクトした場合、エラーとなります。他トランザクションと同時にアクセスする場合のアイソレーションレベルの指定です。トランザクションの開始時に、テーブルの予約を行います。データベースのアクセスを限定します。SQLのみで可能です。より、トランザクションを開始します。同時に、ロックがコンフリクト(衝突)した場合の動作やアクセス並列性の指定などデータベースのアクセス方法に関しても指定できます。テーブルをアクセスするための事前予約も出来ます。これは、複数のデータベースをアクセスするアプリケーションでデータベースの部分的なアクセス制限のために非常に有効です。指定して処理を始めます。節で名前の指定を行わないと、デフォルト(無名)のトランザクションとなります。名前付きのトランザクションにすることにより、1つのアプリケーションで同時に複数のトランザクションを扱えます。すべてのトランザクション名は、ホスト言語変数によりコンパイル時に宣言します。DSQLではトランザクション名の動的な使用を妨げます。パラメータを指定してください。同じ(同名)トランザクションにおいて同じデータの更新を行おうとした場合、最初の更新のみが成功します。この場合、更新を行ったトランザクションがコミットやロールバックされるまで、他のトランザクションはそのデータを更新したり削除したりすることは出来ません。WAIT動作指定(省略時デフォルト)では、このような場合はそれらのトランザクションの処理が待たされます。パラメータの指定が必要です。LEVEL(アイソレーションレベル)は、同じテーブルを同時にアクセスするトランザクション相互での影響の与え方を設定します。この場合、トランザクション開始以降に他の並列するトランザクションで行われた変更は、参照することが出来ません。指定し、トランザクションがテーブルの読込みのみで変更を加えないことを保証することにより、他の読み込みを妨げないようにします。指定することにより、トランザクション中に他のトランザクションが行った最新の変更を参照出来るようになります。同じ行に対するコンフリクト(衝突)が発生しない限り、変更も行うことが出来ます。平走するトランザクションでの変更は、変更後にコミットが行われない限り参照できません。2つのオプションパラメータが指定出来ます。(省略時デフォルト)確定した最新の行を読み込めます。同時に指定されて待ち状態になっている場合、コミットかロールバックで最新版が決まるまで待ち合わせ、その後再度読み込みを行います。未完のトランザクションにさらに新しくなる可能性がある行データがあっても、現在で最新となってる行のデータを読み込みます。RESERVING節を指定してトランザクションを開始することにより、指定したテーブルへのアクセス方法のレベルを示すことが出来ます。トランザクションの開始時にテーブルアクセスの予約を行うことにより、デットロック発生の確率を減少させることが出来るかもしれません。節は、トランザクションでアクセスできるデータベースを限定することにより、システムリソースの消費を抑えます。例は、すべて埋め込みSQLでの例です。無名(デフォルト)のトランザクションを開始します。更新が衝突した場合、最初に変更を行ったトランザクションがコミットかロールバックするまで、処理が待たされます。COMMITTED;名前付きトランザクションの例です。COMMITTED;トランザクション開始時に、テーブルを3つ予約してます。WRITE;※以下はisqlでの例ですが、訳者が独自に付け足したものです。省略可能な句は省略してしまっています。COMMITTED;テーブル予約の例です。予約していますので、トランザクション開始時レベルでのテーブルロック(表ロック)となります。複数のisqlを立ち上げて試してみてください。COMMITトランザクションで生じたデータベースへの変更を反映させて、トランザクションを終了します。DSQLで使用する場合、終端文字のセミコロンは不要です。isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。オプション指定できますが、これは他のRDBとの互換性のためだけに用意されています。コミットするトランザクションの名前です。省略するとデフォルトのトランザクションとなります。旧バージョンInterBase?との互換性のために用意されています。変更のコミットと、トランザクションコンテキストの保存を行います。よりトランザクションが終了します。同時に、すべての変更をデータベースに書き出します。トランザクションで変更後のデータが参照出来るようにします。RETAINを指定しない限り、オープンされたカーソルがあったらクローズします。終了するトランザクションは、一般的に成功した場合となります。常に使用する必要があります。使用してもデータベースには何も影響を与えません。以降のトランザクションでのパフォーマンスや、使用するシステムリソースのことを考えると、どちらかを使用して終了させするべきです。古いバージョンのInterBase?との互換性を保つために用意されています。現在は、データベース接続を切断する場合は、DISCONNECTを使用して下さい。用例isqlでの例です。デフォルトのトランザクションで行ったデータベースへの変更を、すべて反映させます。名前付きトランザクションの場合の例です。TR1;埋め込みSQLで、トランザクションコンテキストを保持したまま変更のみを反映させます。ROLLBACKトランザクションで生じたデータベースへの変更を取り消して、トランザクションを終了します。リリースノートを基として内容を追加しています。[RELEASE];1.5以降のDSQLでは、セーブポイント指定が可能です。DSQLで使用する場合、終端文字のセミコロンは不要です。オプション指定できますが、これは他のRDBとの互換性のためだけに用意されています。ロールバックするトランザクションの名前です。省略するとデフォルトのトランザクションとなります。旧バージョンInterBase?との互換性のために用意されています。データベース接続をすべて切断します。ロールバックするセーブポイントをidenrifierで指定します。1.5以降のDSQLでのみ使用できます。より、現在のトランザクションでのデータベースへの変更をすべて取り消して、トランザクションが終了します。これにより、プログラムとの接続が終了し、システムのリソースが解放されます。指定すると、すべてにデータベースとの接続が切断されます。システムリソースをデータベースがリリースするまで、プログラムは待たされます。トランザクション名を指定することにより、複数のトランザクションを使用するプログラムで、ロールバックを行うトランザクションを指定できます。省略した場合は、デフォルトのトランザクションがロールバックされます。古いバージョンのInterBase?との互換性を保つために用意されています。現在は、データベース接続を切断する場合は、DISCONNECTを使用して下さい。以降では、DSQLにおいてロールバックするセーブポイントを指定することが出来ます。詳しくは、SAVEPOINTを参照して下さい。用例isqlでの例です。デフォルトのトランザクションをロールバックします。ROLLBACK;埋め込みSQLプログラムで、名前付きトランザクションをロールバックします。SAVEPOINTトランザクションをロールバックするときに、任意の位置へロールバックするためのセーブポイントを指定します。DSQL,isqlで使用できます。リリースノートを基としています。セーブポイントを識別するための識別名です。対応するROLLBACKで使用します。より、任意の時点へのロールバックを行うためのセーブポイントを指定できます。セーブポイントにより、エラー時などですべてをロールバックせずにその時点からの処理をすることが可能となるので、都合の良いエラー処理手順を実現できます。文を使用してください。これにより、以下の処理が行われます。トランザクションでセーブポイント以降に行われた変更はロールバックされます。そのセーブポイント以降に作成されたセーブポイントを消去します。指定したセーブポイントや、それ以前に作成されたセーブポイントは消去されません。これにより、同じセーブポイントに何度も戻すことが可能です。セーブポイント以降に行われた、暗黙的・明示的な行ロックをすべて解除します。他トランザクションがセーブポイント後にロックした行をアクセスする場合、トランザクションがコミットかロールバックするまで待たされます。ロックされていない行に対するリクエストやアクセスは即座に処理できます。※行ロックに関する本動作は、将来のバージョンで変更される可能性があります。同一トランザクションで同じレコードの更新を何度も行った場合、セーブポイントのアンドゥログを格納するために、貴重なサーバのメモリを大量に消費してしまう場合があります。文によってセーブポイントのメンテナンスを行うことにより、消費されたシステムリソースを解放することが出来ます。作成したセーブポイントが消去されます。このとき、ONLY識別子の指定を省略すると、それ以降のセーブポイントがすべて消去されます。内部セーブポイントデフォルトでは、データベースエンジンは自動的にトランザクションレベルのシステムセーブポイントをトランザクションのロールバックに使用します。実行すると、そのトランザクションで行われた変更はトランザクションレベルのセーブポイント時点に引き戻された後に、トランザクションのコミットが行われます。トランザクションレベルのセーブポイント下において、データベースボリュームへの変更が大量(10^4〜10^6程度のレコード数以上)に発生した場合、ある時点でデータベースエンジンは自動的にトランザクションレベルのセーブポイントを解放し、TIPメカニズムによるロールバック処理へとトランザクション処理方法を変更します。フラグをを使用することにより、トランザクションレベルのセーブポイント作成の処理を禁止することが出来ます。PSQLに関してPSQLにはユーザーレベルのSAVEPOINTを実装していません。レイヤに実装すると、これを含んだプロシージャコールによりアトミックルールが破壊される場合があるためです。このような場合のFirebirdにおけるアンドゥ処理は、ストアドプロシージャ・トリガの例外処理により提供されます。SQL/PSQLは、自動的に内部セーブポイントを使用して実行されます。これにより、それらで記述されたSQLの実行結果は、すべての変更が成功して完了、すべての変更を取り消し、またはエラーのハンドルのいずれかとなります。各々の例外処理ブロックでは、自動的なシステムセーブポイントが個別に使用されます。用例テーブルを新規作成して列を挿入し、セーブポイントの動作を確認する例です。1回目のSELECTでは0行、2回目のセレクトでは2行、3回目のセレクトでは1行が取得できます。SAVEPOINTセーブポイントを削除します。DSQL,isqlで使用できます。リリースノートの情報を基として独自に作成しました。既存のセーブポイントを識別するための識別名です。指定したセーブポイントのみを削除します。省略すると、そのセーブポイント以降のすべての無名セーブポイントを同時に削除します。より、指定した既存のセーブポイントを削除し、そのために確保されていたシステムリソースを解放します。同一トランザクションで同じレコードの更新を何度も行った場合、セーブポイントのアンドゥログを格納するために、貴重なサーバのメモリを大量に消費してしまう場合があります。文によってセーブポイントのメンテナンスを行うことにより、消費されたシステムリソースを解放することが出来ます。作成したセーブポイントが消去されます。このとき、ONLY識別子の指定を省略すると、それ以降のセーブポイントがすべて消去されます。