表示: Delphi
C++
表示設定
トランザクションの排他レベルの指定
提供:RAD Studio
データベースへの接続:インデックス への移動
トランザクション排他レベルは,同一のテーブルを操作する同時トランザクション間の対話方式を指定するものです。これは特に,1 つのトランザクションがほかのトランザクションによるテーブルへの変更にどれだけ遭遇するかに影響します。
サーバーの種類ごとに,可能なトランザクション排他レベルのサポートは異なります。可能なトランザクション排他レベルは,以下の 3 とおりです。
- DirtyRead:排他レベルが DirtyRead の場合は,あるトランザクションによって実行された変更のすべてを,その変更がコミットされていない時点でも使用中のトランザクションから読み出せます。コミットされていない変更は確定したものではなく,いつでもロールバックされる可能性があります。この値では最低限の排他処理しか提供されないため,Oracle,Sybase,MS-SQL,InterBase などの多くのデータベースサーバーで使用できません。
- ReadCommitted:排他レベルが ReadCommitted の場合は,ほかのトランザクションによってコミットされた変更だけが読み出せます。この設定の場合,ロールバックの可能性があるコミットされていない変更を,使用中のトランザクションが読み出す危険はありませんが,読み出しているときにほかのトランザクションがコミットされると,整合性が取れていないデータベースのビューを受け取ってしまう可能性は残ります。このレベルは,BDE が管理するローカルトランザクションを除く,すべてのトランザクションで利用可能です。
- RepeatableRead:排他レベルが RepeatableRead の場合は,使用中のトランザクションが読み出したデータベースのデータに,整合性が取れていることが保証されます。使用中のトランザクションは,データを一度だけ読み出せます。以後,ほかの同時トランザクションによってデータが変更されコミットされたとしても,使用中のトランザクションで読み出すことはできません。この排他レベルでは,トランザクションがいったんレコードを読み出すと,そのレコードのビューは変化しないことが保証されます。これは最も高い排他レベルです。このレベルは,Sybase や MS-SQL など,いくつかのサーバーでは利用できず,BDE が管理するローカルトランザクションでも利用できません。
さらに,TSQLConnection では,データベース固有のカスタム排他レベルを指定できます。カスタム排他レベルは,the dbExpress ドライバによって定義されます。詳細については,ドライバのマニュアルを参照してください。
メモ: 排他レベルの実装状況の詳細は,使用するサーバーのドキュメントを参照してください。
TDatabase と TADOConnection では,TransIsolation プロパティを設定することにより,トランザクション排他レベルを指定できます。TransIsolation をデータベースサーバーがサポートしていない値に設定すると,(利用可能であれば)その次に高い排他レベルになります。より高い利用可能なレベルがない場合には,トランザクションを開始しようとすると,接続コンポーネントで例外が発生します。
TSQLConnection を使用する場合,トランザクション排他レベルはトランザクション記述子の IsolationLevel 項目によって制御されます。
InterBase Express を使用する場合,トランザクション排他レベルはトランザクションパラメータによって制御されます。