- PR -

SQL SERVERの行ロックについて

1
投稿者投稿内容
KingKong
会議室デビュー日: 2004/08/26
投稿数: 1
投稿日時: 2004-08-26 15:13
今、SQL SERVER2000の勉強中なのですが 行ロックについて教えていただきたいのです。
例えばテーブル(tbl)の中にID,NAMEというフィールドがありそれぞれ
ID NAME
----------
1 A
2 B
を持っていたとします。
1に対して行ロックをかけたく(読み取り、更新共に不可)

BEGIN TRANSACTION
SELECT * FROM TBL WITH (UPDLOCK,ROWLOCK) WHERE ID=1

としたのですが ID=2のほうもロックがかかってしまい
読み取りできなくなってしまいました。
またそのとき新しく登録もできなくなってしまいました。
1以外のIDは変更・追加できるような方法(ORACLEのFOR UPDATE NOWAITのように)
はないものでしょうか?

ご教授よろしくお願いいたします。
gluon
会議室デビュー日: 2003/12/26
投稿数: 1
投稿日時: 2004-08-27 16:21
IDにインデックスはついてますでしょうか?
インデックスが無い場合、SQLServerは条件に合う行を、物理データ
を1行ずつ舐めながら検索していきますので、1行目がロックされて
いると2行目以降にアクセスする事ができません。
インデックスをつければ物理データを舐めないで直接目的の行に
行けますので問題なく2行目以降をいじれるはずです。
1

スキルアップ/キャリアアップ(JOB@IT)