カテゴリ: PostgreSQL 更新日: 2026/02/02

PostgreSQLの行ロックとテーブルロックを完全解説!初心者でもわかる違いと仕組み

PostgreSQLの行ロック・テーブルロックの違い
PostgreSQLの行ロック・テーブルロックの違い

先生と生徒の会話形式で理解しよう

生徒

「PostgreSQLのロックって、行ロックとかテーブルロックとか種類があるみたいですが、何が違うんですか?」

先生

「簡単に言うと、どこまで広く鍵をかけるかの違いです。1行だけなのか、表まるごとなのか、という違いですね。」

生徒

「パソコンに詳しくなくても理解できますか?」

先生

「もちろんです。名簿に鉛筆で名前を書く場面を想像しながら説明します。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースという「情報を整理して保管する箱」に対して指示を出すための言葉です。 データベースは、紙の名簿や表を電子化したような存在で、名前や年齢、連絡先などを整理して保存できます。

PostgreSQLは、そのSQLを使って操作できるデータベースの一つで、 たくさんの人が同時に使っても安全に動くように工夫されています。 その安全を支えている重要な仕組みが「ロック」です。

2. ロックとは何か?

2. ロックとは何か?
2. ロックとは何か?

ロックとは、「他の人が同時に同じ場所を触れないようにする仕組み」です。 データベースは一人で使うものではなく、複数人が同時に操作します。 そのため、何も対策をしないとデータが壊れてしまいます。

例えば、同じ名簿を二人が同時に消しゴムで消したら、 どちらの内容が正しいかわからなくなります。 それを防ぐためにロックが使われます。

3. 行ロックとは?

3. 行ロックとは?
3. 行ロックとは?

行ロックは、表の中の「1行だけ」に鍵をかける仕組みです。 名簿で例えると、特定の1人の名前の行だけを保護するイメージです。

PostgreSQLでは、UPDATEやDELETEなどで特定の行を変更すると、 自動的にその行にロックがかかります。 他の人は、別の行なら同時に作業できます。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com

UPDATE users
SET age = 26
WHERE id = 1;

この場合、idが1の行だけがロックされます。 他の行は自由に読み書きできます。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 26  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com

4. テーブルロックとは?

4. テーブルロックとは?
4. テーブルロックとは?

テーブルロックは、表全体に鍵をかける仕組みです。 名簿で言うと、「この名簿は今使えません」と全員に伝える状態です。

大きな変更を行うときや、表の構造を変えるときに使われます。 その間、他の人はその表を操作できなくなります。


LOCK TABLE users IN ACCESS EXCLUSIVE MODE;

この命令を実行すると、usersテーブル全体がロックされます。 安全ですが、その分待ち時間が発生しやすくなります。

5. 行ロックとテーブルロックの違い

5. 行ロックとテーブルロックの違い
5. 行ロックとテーブルロックの違い

行ロックは「狭く安全」、テーブルロックは「広く確実」という特徴があります。 行ロックは他の作業を邪魔しにくく、普段の更新処理でよく使われます。

テーブルロックは強力ですが、同時作業を止めてしまうため、 必要な場面だけで使われます。 PostgreSQLは基本的に行ロックを優先する設計です。

6. SELECTとロックの関係

6. SELECTとロックの関係
6. SELECTとロックの関係

SELECTは「見るだけ」の操作なので、 通常は行ロックやテーブルロックを邪魔しません。

PostgreSQLは、同時に見られる仕組みを持っているため、 読み取りが多くても止まりにくい特徴があります。


SELECT *
FROM users
WHERE age >= 20;

7. 初心者が押さえておくポイント

7. 初心者が押さえておくポイント
7. 初心者が押さえておくポイント

行ロックは普段の更新で自動的に使われます。 テーブルロックは特別な場面で使われる強いロックです。

最初は「1行だけ守るのが行ロック」「全部守るのがテーブルロック」 というイメージを持つだけで十分です。 これを理解することで、PostgreSQLの同時実行制御がぐっと身近になります。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎