2

私はSQLに非常に慣れていません。SQL Server 2008 R2 を使用しています。次の問題があります。

(1)

トランザクションが開始されましたが、そのコミット ポイントに達していません。

UPDATE Student 
SET subject = 'Technology' 
WHERE subjectCode = 'tech';

これが実行されているとき、テーブル/行がいっぱいになっているロックのタイプは何ですか??

(2)

トランザクションが保持するロックを取得する方法はありますか?

4

1 に答える 1

2

答え (1):

トランザクションが既存のロックによってブロックされていない場合、Studentテーブル内の を持つsubjectCode = 'tech'すべての行に(X)(排他的) ロックが適用されます。

ページおよびテーブル レベルでは、(IX)(意図的な排他的) ロックが発生します。これは、"階層" のさらに下 (テーブル -> ページ -> 行) のどこかに排他ロックが設定されていることを示します。

5000 を超える行を更新している場合は、ロックのエスカレーションが開始され、SQL Server によって 5000 以上の個別の行レベルの排他ロックが単一のテーブル レベルの排他ロックに置き換えられます。つまり、基本的に誰もそのテーブルで何もできません。

あなたの質問 (2)については、この他の SO の質問への回答を参照してください

于 2013-04-23T20:41:11.653 に答える