トランザクション
トランザクション(データベースと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()を呼び出し、変更を取り消します。これにより、片方の口座のみが更新されるような不整合を防ぎます。
トランザクションに関するよくある質問
トランザクションが学べる書籍の紹介
「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのトランザクションやPDO::__construct()、PDOStatement::fetchAll()、PDO::prepare()、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。
よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。
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」カテゴリーが追加されましました!