C230 レコードロック

レコードロックとは、あるユーザーが参照しているレコードに、他のユーザーがアクセスできないように規制を設けることをいいます。同じレコードに対して、複数人が同時に更新を行うことを阻止できるように、鍵をかけるようなイメージです。今回はレコードロックについて紹介します。

レコードロックとは

studentsテーブル

idnameage
1山田15
2田中16
3佐藤15
4高橋17

下記のようにロックをかけたいテーブルの後ろに WITH(ロックをかけたい処理、ロックをかけたい対象)という構文を用いて記載します。下記の例では、idが2のレコードに対して更新処理のロックをかけています。

SQL
SELECT * FROM 
students WITH(UPDLOCK,ROWLOCK)
WHERE id = 2

ロック中に、他の方がupdateを実行した場合、実行されないままの状態となります。

また、レコードロック以外にも様々な用途に応じたロックがあります。

エンジニアからのアドバイス

ロックはデータの整合性を保つために必要な仕組みですが、処理がブロックされる原因にもなりやすいです。クエリを実行する際に「どういったロックが、どの粒度でかけられるのか、そのロックの互換性はどうか」といったことを意識して想定されるブロックを防げるようにしましょう。

---