ふりかえり

本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

本編に入ります!
LOCK TABLE とは?
SQL の LOCK TABLE は、テーブルに対してロック(鍵)をかけて、他のユーザーが同時に変更できないようにする命令です。
特に Oracle で使われることが多く、「今からこのテーブルを変更するので、他の人は一時的に変更しないで!」という意味です。
何のために使う?
- データの整合性を守るため(他の人の操作とぶつからないようにする)
- 複数のSQL操作を安全に実行したいとき
- トランザクション中に他人の更新・削除を防ぎたいとき
🔓 ロックの種類(代表的な2つ)
| ロック種類 | 意味 |
|---|---|
IN SHARE MODE | 読み取り専用。他の人は更新できないが、読むことはできる |
IN EXCLUSIVE MODE | 完全にロック。他の人は読むことも書くこともできない(更新・削除・挿入) |
実務レベルの使用例を見ていこう!

実際に、SQLを使用してデータを確認していきましょう。
SQLに関しては以下を使用して解説していきます。
create table文、select文、insert文、update文、delete文、
drop table文、につきましては、過去にアップロードした
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーにSQLがあるから、そちらからでも
参照できます!
Oracle Live SQLで実行していきます!
今回、実行するSQLの一覧
テーブル作成
create table employees (
employee_id number,
name varchar2(50)
);
データ挿入
insert into employees (employee_id, name) values (1, '田中');
insert into employees (employee_id, name) values (2, '佐藤');
commit;
SELECT(通常の読み取り)
select * from employees;
LOCK TABLE を使ってロック
lock table employees in exclusive mode;
このSQLを実行すると、自分のトランザクションが終了(commitまたはrollback)するまで、他のユーザーはemployeesテーブルを変更できません。
注意点
不必要に長いロックは、他のユーザーに迷惑がかかるので避けましょう。
LOCK TABLE を使うときは、**トランザクション制御(commitやrollback)**を忘れずに!
ロックの影響で、他の人のSQLが「待たされる(ブロックされる)」ことがあります。
実行の流れイメージ(まとめ)
-- トランザクション開始
lock table employees in exclusive mode;
update employees
set name = '山田'
where employee_id = 1;
-- 確定
commit;
この流れで、「山田」さんへの更新が安全に行えます。他のユーザーはその間更新できません。
SELECT FOR UPDATEと LOCK TABLEの違いは?
SELECT FOR UPDATE と LOCK TABLE はどちらも データを安全に扱うためにロックをかける命令ですが、目的と使い方に違いがあります。
違いの一覧表
| 項目 | SELECT FOR UPDATE | LOCK TABLE |
|---|---|---|
| ロック対象 | 行(row)単位 | テーブル全体 |
| 目的 | 更新対象の行だけをロックしたい | テーブル全体をロックして他の人の操作を禁止したい |
| よく使う場面 | ある条件の行だけ更新したいとき | バッチ処理・一括更新など、他人の操作を一時的に完全に止めたいとき |
| 他の人のアクセス | 読み取りは可能だが、ロックされた行の更新は不可 | テーブル全体の更新・挿入・削除ができなくなる(排他制御) |
| トランザクション | トランザクション内で使用(commitが必要) | トランザクション内で使用(commitが必要) |
| Oracleでの使用 | よく使う | 特定の用途で使う(強力なロック) |
使用例で比較
SELECT FOR UPDATE の例(行ロック)
-- トランザクション開始
select *
from employees
where employee_id = 1
for update;
-- この行だけがロックされる
update employees
set name = '山田'
where employee_id = 1;
commit;
この場合、employee_id = 1 の行だけがロックされ、他の行は他のユーザーが操作できます。
LOCK TABLE の例(テーブル全体ロック)
-- トランザクション開始
lock table employees in exclusive mode;
-- 全行に影響する操作
update employees
set name = '山田'
where employee_id = 1;
commit;
この場合、employees テーブル全体がロックされるため、他のユーザーは読み書きできません。
まとめ
-
SELECT FOR UPDATE:ピンポイントでロック(行) -
LOCK TABLE:まとめてロック(テーブル)
通常は「必要最小限のロック」が望ましいため、行だけロックする SELECT FOR UPDATE のほうがよく使われます。

LOCK TABLEについて解説しました。
次回もお楽しみに!










コメント