checkpoint

自分用のIT技術系ノートです。古い情報や間違っている情報もあるので注意。

トランザクション分離レベルとロックヒント

READ UNCOMMITTED
 共有ロックをかけない。ダーティリード可。
READ COMMITTED (SQL Serverデフォルト)
 リソースを使用してるときだけ共有ロックをかける。反復不可能読み取り。
REPEATABLE READ
 トランザクションの終了まで共有ロックをかける。ファントムあり。
SERIALIZABLE
 ファントムなしREPEATABLE READ。(レンジロックをかける)

SET TRANSACTION ISOLATION LEVEL 分離レベル名 ※レベル名はスペース有

DBCC USEROPTIONS

NOLOCKもしくはREADUNCOMMITTED
 READ UNCOMMITTED分離レベルに同じ SELECTのみ ※スペースなし
HOLDLOCKもしくはSERIALIZABLE
 SERIALIZABLE分離レベルに同じ
READCOMMITTED
REPEATABLEREAD
 同名分離レベルに同じ ※スペースなし
ROWLOCK
 行レベルにロックをかける
PAGLOCK
 ページレベルにロックをかける
TABLOCK
 テーブルレベルにロックをかける
READPAST
 排他ロックされている行を読み飛ばす SELECTのみ
UPDLOCK
 更新ロックをかける
XLOCK
 排他ロックをかける
TABLOCKX
 (TABLOCK, XLOCK)に同じ


オブジェクト名の後に WITH(ロックヒント) のように指定。


なんかMSDNではXLOCKはTABLOCKとPAGLOCKだけ指定できるみたいに書いてるけど、
WITH(XLOCK, ROWLOCK)で行レベル排他ロックできるらしい…。なんで?


あと、誰かREADPASTのおいしい使い方を教えて欲しい。