非コミット読み取り(READ UNCOMMITTED)
コミット済み読み取り(READ COMMITTED)
再読み込み可能読み取り(REPEATABLE READ)
直列化(SERIALIZABLE)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
トランザクションの開始を宣言します(これがないとロックしません)
BEGIN TRANSACTION
COMMIT
ROLLBACK TRANSACTION
デフォルトのロックのタイムアウト時間を調べます
SELECT @@lock_timeout AS default_lock_timeout;
-1 の値が返ってきたときはタイムアウトしません(恐ろしい...)
ロックのタイムアウト時間を 30秒 に設定する
SET LOCK_TIMEOUT 30000
msec で指定するので30秒にセットするときは 30000 になります。
排他ロックは通常 INSERTやUPDATEなどの更新処理のタイミングでかかりはじめます。 SELECTをする時からロックを開始したいときは明示的にロックをかけます
select max(ID) AS maxid from MY_TABLE WITH(XLOCK);
WHERE句が来るときは位置に注意
select * FROM MY_TABLE WITH(XLOCK) WHERE ID = 5 ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT * FROM EV100TL
ROLLBACK TRANSACTION