1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【データベースロック】行ロックについて図解してみた

1
Last updated at Posted at 2026-08-13

データベースロック 行ロックって実際どう動くの?MySQLで実験してみた!

データベースのロックについて知識として何となく理解しているものの、実際どういうふつにロックされているのか疑問に思ったことはありませんか?
今回は、DBのGUIツールを使って実際にロックを引き起こし、その挙動を体感してみたら面白かったので図を交えながら解説します。

そもそも行ロックってなに?

行ロックとは、データベースで更新対象の特定レコード(行)のみをロックし、他からの同時書き込みや改変を防ぐ仕組みです。テーブル全体をロックする方式と比べて競合が起きにくく、システムの同時並行処理を高めることができます。

この知識だけでも十分かもしれませんが今回は実際に体感してみましょう!

環境構築準備

今回使うDBはこちらです。
(category_idにはIndexをつけています。)

スクリーンショット 2026-08-09 6.07.47.png

DBのGUIツールには MySQL Workbench を使用します。
ロックを引き起こすには2つのセッションが必要なため、図のように2つローカルでの接続を作っておきます。
image.png

  • セッション1:localhost
  • セッション2:localhost2

として進めていきます!!

実験開始!行ロックを体感してみよう

1.セッション1で特定の行をロックする

まずセッション1(localhost)で、以下のSQLを実行してトランザクションを開始します。

BEGIN;
UPDATE items SET stock = 45 WHERE item_id = 2;

スクリーンショット 2026-08-11 11.37.32.png
これで item_id = 2のレコードがロックされました!
他のセッションからはこのitem_id = 2のレコードは更新ができないはずです。

図にするとこんな状態ですね。

スクリーンショット 2026-08-11 11.38.17.png

2.セッション2で同じ行を更新してみる

次に、セッション2(localhost2)から同じitem_id = 2に更新をかけてみましょう。

BEGIN;
UPDATE items SET stock = 48 WHERE item_id = 2;
commit

こちらを実行すると・・・
スクリーンショット 2026-08-11 11.38.51.png

処理が完了せず、ストップしました!
GUIのインジケーターがクルクル回ったままで、処理が終わらないことが確認できます。
これがロック待ちの状態です。

図にするとこんな感じです。
スクリーンショット 2026-08-11 11.38.40.png

3.セッション1をコミットしてロックを解放する

それでは、待たせているセッション1の処理を完了させてロックを解放させましょう。

-- BEGIN;
-- UPDATE items SET stock = 45 WHERE item_id = 2;
commit

スクリーンショット 2026-08-11 11.40.10.png

すると・・・・!
セッション1をコミットした瞬間に、セッション2のロックが解放され、データの更新が実行されます。

スクリーンショット 2026-08-11 11.40.03.png

データを確認してみると、とitem_id = 2のstockが48に更新されており、セッション2の結果が反映されています。

スクリーンショット 2026-08-11 11.40.21.png

まとめ

今回は、行ロックの仕組みについて図解と体験を交えて解説をしました。

答えがすぐ手に入るAI時代において自分で手を動かして腑に落ちるまで理解するという作業はとても大事だなと改めて思いました。

今後もデータベースのロックについてはまとめていこうと思うので乞うご期待!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?