- - PR -
SQL SERVERの行ロックについて
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のように) はないものでしょうか? ご教授よろしくお願いいたします。 |
|
投稿日時: 2004-08-27 16:21
IDにインデックスはついてますでしょうか?
インデックスが無い場合、SQLServerは条件に合う行を、物理データ を1行ずつ舐めながら検索していきますので、1行目がロックされて いると2行目以降にアクセスする事ができません。 インデックスをつければ物理データを舐めないで直接目的の行に 行けますので問題なく2行目以降をいじれるはずです。 |
1
