16.20 - ロックと並行性 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

DML SELECTにより、セッション分離レベル(以下のテーブルを参照)およびLock Managerが課すロック レベルまたはLOCKING修飾子を使用して指定するロック レベルに基づいて、SELECT文で参照されるテーブルまたは行にデフォルトでREADロックがかけられます。LOCKINGリクエスト修飾子を参照してください。SELECT文でビューを参照する場合には、基礎となるテーブルごとにREADロックが設定されます。

このトピックは、オブジェクト定義文でSELECTサブクエリーをネストするCREATE JOIN INDEXやCREATE VIEWなどのDDL文には該当しません。

外側のSELECT文およびSELECTサブクエリーが、DELETE、INSERT、MERGE、またはUPDATE文を使ってデータを操作するDML文内にネストされていない場合、セッション トランザクションの分離レベルがSERIALIZABLEであっても、デフォルト値のロック重大度は常にREADです。

セッション トランザクションの分離レベルがREAD UNCOMMITTEDで、DBS制御フィールドAccessLockForUncomReadがTRUEに設定されている場合、SELECT操作のデフォルト値のロック レベルは、以下の段落とテーブルで説明する要因によって決まります。

以下のテーブルに示すように、SELECTサブクエリーが、DELETE、INSERT、MERGE、またはUPDATE文を使ってデータを操作するDML文内にネストされている場合、DBS制御フィールドAccessLockForUncomReadがTRUEで、そのセッションのトランザクションの分離レベルがREAD UNCOMMITTEDならば、デフォルト値のロック重大度はACCESSです。

トランザクションの分離レベル DBS制御AccessLockForUncomReadフィールド設定 外部SELECTと通常のSELECTサブクエリー操作におけるデフォルト値のロック重大度 DELETE、INSERT、MERGE、UPDATEの各文に埋め込まれたSELECT操作におけるデフォルト値のロック重大度
SERIALIZABLE FALSE READ READ
TRUE READ
READ UNCOMMITTED FALSE READ
TRUE ACCESS

SELECT文ではLOCKING修飾子を指定せずに、テーブルのアクセスに使用するビューでLOCKING修飾子を指定すると、Teradata Databaseはビューで指定したロックを設定し、上のテーブルで説明したデフォルト値には従いません。

例えば、以下のビューを作成すると仮定します。

     CREATE VIEW access_view (a, b) AS
     LOCKING TABLE accntrec FOR ACCESS
     SELECT accntno, qualifyaccnt
     FROM accntrec
     WHERE qualifyaccnt = 1587;

指定されたセッション分離レベルおよびAccessLockForUncomReadフィールドの設定に関係なく、このSELECT文によりaccntrecテーブルにはACCESSロックが設定されます。

     SELECT a, b
     FROM access_view;

詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL」を参照してください。