トランザクションと同時実行制御とは?データベースが壊れない理由を初心者向けに解説

あけお

スクールに多額のお金を支払う前に、僕の記事で学習してね!

目次

はじめに

データベースの話が進むと、
急に難しそうな言葉が出てきます。

  • トランザクション
  • ロック
  • 同時実行制御

でも実はこれらは、

Webサービスを
当たり前に使えるようにするための仕組み

です。

この記事では、

トランザクションとは何か?
なぜ複数人が同時に使ってもDBは壊れないのか?

を、初心者向けに解説します。

トランザクションとは何か?

トランザクションとは一言でいうと、

複数のDB操作を
「ひとまとまり」として扱う仕組み

です。

トランザクションの身近な例

銀行振込を例にします。

  1. 送金元の残高を減らす
  2. 送金先の残高を増やす

この2つは、

両方成功して初めて意味があります。

途中で失敗したら、
お金は動いてはいけません。

👉
これを保証するのが
トランザクションです。

コミットとロールバック

トランザクションには
必ずこの2つが出てきます。

  • コミット
    → 変更を確定する
  • ロールバック
    → 変更を取り消す

👉
成功したらコミット、
失敗したらロールバック
です。

なぜトランザクションが必要なのか?

トランザクションがないと、

  • 処理の途中でエラー
  • サーバー障害
  • 同時アクセス


データが中途半端な状態になります。

👉
これは致命的です。

トランザクションの4つの性質(ACID)

トランザクションには
有名な4つの性質があります。

A:Atomicity(原子性)

  • 全部成功 or 全部失敗

C:Consistency(一貫性)

  • ルールを守った状態を保つ

I:Isolation(独立性)

  • 他の処理に邪魔されない

D:Durability(永続性)

  • 確定したら消えない

👉
DBの信頼性の核心です。

同時実行とは何か?

同時実行とは、

複数の処理が
同時にデータベースを操作すること

です。

Webサービスでは、

  • 複数ユーザー
  • 複数リクエスト


常に同時に動いています。

同時実行で起きる問題

同時実行があると、
次のような問題が起きます。

  • 二重更新
  • データの不整合
  • 想定外の値

👉
これを防ぐ必要があります。

ロックとは何か?

そこで登場するのが
ロックです。

ロックとは、

「今このデータ使ってます」
と他の処理に知らせる仕組み

です。

ロックのイメージ

  • 1人が使っている間は
  • 他の人は待つ

👉
トイレの個室のようなイメージです。

ロックの種類(概要)

ここでは概要だけでOKです。

  • 行ロック
  • テーブルロック

👉
細かい違いは後回しでOKです。

分離レベルとは何か?(軽く)

分離レベルとは、

どこまで他の処理を
影響させないか

という設定です。

  • 完全に分離
  • ある程度許可

👉
安全性と性能のバランスです。

Laravelとトランザクション

Laravelでは、

PHP
<?php
DB::transaction(function () {
    // DB操作
});

と書くだけで、

  • 開始
  • コミット
  • ロールバック


自動で管理してくれます。

👉
使わない理由はありません。

トランザクションを使うべき場面

次のような場合は
必ず使います。

  • 複数テーブルを更新
  • お金・在庫・ポイント
  • 途中失敗が許されない処理

トランザクションを使いすぎると?

注意点もあります。

  • ロックが長くなる
  • 性能に影響

👉
必要な範囲で使うのが重要です。

初心者が押さえるべきポイント

この段階では、

  • トランザクション=まとめて処理
  • 失敗時はロールバック
  • 同時実行がある前提

これが分かっていればOKです。

次に学ぶべきこと

トランザクションが分かったら、
次は👇です。

👉 テーブル設計の基礎
(正規化とは何か?)

まとめ

  • トランザクションはDBの命
  • ACIDが信頼性を支える
  • ロックで同時実行を制御
  • Laravelでも必須知識

この記事は
DB中級への入口です。

あけお

あなたの挑戦を応援しています!!

よかったらシェアしてね!
目次