レコードロックとは、あるユーザーが参照しているレコードに、他のユーザーがアクセスできないように規制を設けることをいいます。同じレコードに対して、複数人が同時に更新を行うことを阻止できるように、鍵をかけるようなイメージです。今回はレコードロックについて紹介します。
レコードロックとは
studentsテーブル
| id | name | age |
| 1 | 山田 | 15 |
| 2 | 田中 | 16 |
| 3 | 佐藤 | 15 |
| 4 | 高橋 | 17 |
下記のようにロックをかけたいテーブルの後ろに WITH(ロックをかけたい処理、ロックをかけたい対象)という構文を用いて記載します。下記の例では、idが2のレコードに対して更新処理のロックをかけています。
SQL
SELECT * FROM
students WITH(UPDLOCK,ROWLOCK)
WHERE id = 2ロック中に、他の方がupdateを実行した場合、実行されないままの状態となります。
また、レコードロック以外にも様々な用途に応じたロックがあります。
エンジニアからのアドバイス
ロックはデータの整合性を保つために必要な仕組みですが、処理がブロックされる原因にもなりやすいです。クエリを実行する際に「どういったロックが、どの粒度でかけられるのか、そのロックの互換性はどうか」といったことを意識して想定されるブロックを防げるようにしましょう。
