共有ロックと専有ロック - Shared Lock & Exclusive Lock

はじめに

先週に引き続き、DB関連ネタです。
同時実行制御について噛み砕きます。

前提

ロックとは、あるデータを他の人が触れないように一時的に“鍵をかける”仕組みです。
同時に複数の人が同じデータを編集して、内容が壊れないようにすることが目的です。

2つのロック

早速日常に例えて考えてみます。
こちらの記事は図書館の作業スペースにて書いているので、図書館で例えてみます。

図書館の本を「データ」とします📕

状況ロックの種類他の人の行動
読むだけ(閲覧中)🟦 共有ロック(Shared Lock)他の人も「読むだけ」ならOK。でも「書き換え」はダメ。
書き込み中(メモを追記中)🟥 専有ロック(Exclusive Lock)他の人は読むことも書くことも禁止。

整理すると、共有ロックは他の読み取りを許可するが書き込みを禁止します。他方、専有ロックは他の読み取りも書き込みも禁止します。

実際には、SELECTで共有ロックし他の人も読めるようにするが、書き込みは防ぐようにしています。
UPDATE / DELETE / INSERT(書き込み)では専有ロックし同時書き込みでデータが壊れるのを防いています。

まとめ

一言にまとめると。。。

🔐 共有ロック:みんなで「読むだけ」ならOK
🔒 専有ロック:書く人だけが「独占」する

となります。
日本語訳がいまいちなのかもしれませんねw
Exclusiveを排他と英訳すれば分かりやすいかもしれません。