{category}

PHP - PDO

トランザクション

トランザクション(データベースとSQL

意味 一連の処理をまとめる機能


トランザクションとは?

トランザクションは、データベース操作を一つのまとまりとして扱う機能です。複数の操作を一つの単位として実行し、全ての操作が成功した場合のみ変更を確定(コミット)します。途中で失敗した場合は、全ての変更を取り消し(ロールバック)、データの整合性を保ちます。

トランザクションの具体的な使い方

トランザクションの例

// データベース接続(PDOオブジェクト)が $pdo に格納されているとします

try {
    // トランザクションの開始
    $pdo->beginTransaction();

    // 口座1から100円引き落とし
    $stmt1 = $pdo->prepare('UPDATE accounts SET balance = balance - :amount WHERE id = :id');
    $stmt1->execute(['amount' => 100, 'id' => 1]);

    // 口座2に100円入金
    $stmt2 = $pdo->prepare('UPDATE accounts SET balance = balance + :amount WHERE id = :id');
    $stmt2->execute(['amount' => 100, 'id' => 2]);

    // トランザクションのコミット(変更の確定)
    $pdo->commit();
    echo "転送が成功しました。\n";

    // 更新後の残高を表示
    $balances = $pdo->query('SELECT id, balance FROM accounts WHERE id IN (1, 2)');
    foreach ($balances as $account) {
        echo "口座{$account['id']}の残高: {$account['balance']}円\n";
    }
} catch (Exception $e) {
    // エラーが発生した場合はロールバック
    $pdo->rollBack();
    echo "転送に失敗しました: " . $e->getMessage() . "\n";
}

👇出力結果

転送が成功しました。
口座1の残高: 900円
口座2の残高: 1100円

この例では、二つの口座間で100円を転送する処理をトランザクションで管理しています。beginTransaction()でトランザクションを開始し、両方の更新が成功すればcommit()で変更を確定します。途中でエラーが発生した場合はcatchブロックでrollBack()を呼び出し、変更を取り消します。これにより、片方の口座のみが更新されるような不整合を防ぎます。

トランザクションに関するよくある質問

Q. トランザクションの目的は?
A. トランザクションの主な目的は、複数のデータベース操作を一つの論理的な単位として扱い、データの整合性を保つことです。全ての操作が成功した場合のみ変更を確定し、一つでも失敗した場合は全ての変更を取り消すことができます。
Q. ROLLBACKとは何ですか?
A. ROLLBACKは、トランザクション内で行われた全ての変更を取り消し、トランザクション開始前の状態に戻す操作です。エラーが発生した場合や、意図的にトランザクションをキャンセルする場合に使用します。
Q. トランザクションの注意点は?
A. トランザクションを使用する際の主な注意点は、トランザクションの範囲を適切に設定すること、デッドロックを避けるためにトランザクションの実行時間を短くすること、そしてエラー処理を適切に行うことです。また、トランザクション内でコミットやロールバックを確実に実行することも重要です。

トランザクションが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのトランザクションやPDO::__construct()、PDOStatement::fetchAll()、PDO::prepare()、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

PDO::__construct()

データベース接続の確立

種類: PDO

PDOStatement::fetchAll()

全ての結果行を取得

種類: PDO

PDO::prepare()

安全なSQL実行方法

種類: PDO

is_object()

オブジェクトかどうかを判定する関数

種類: 型チェック

continue

ループの次の繰り返しへ

種類: ジャンプ