[PHP]DB2のトランザクション制御!db2_autocommitをやさしく解説

PHP

こんにちは!今回は、DB2データベースでのトランザクション制御に使用するdb2_autocommit関数について、分かりやすく解説していきます!

db2_autocommitって何?🤔

簡単に言うと、データベースの変更を「自動で確定するかどうか」を設定する機能です。

  • ON:SQL実行後、すぐに変更が確定(保存)される
  • OFF:明示的にcommitするまで変更が確定されない

基本的な書き方

// 自動コミットをOFFにする
db2_autocommit($connection, DB2_AUTOCOMMIT_OFF);

// 自動コミットをONにする
db2_autocommit($connection, DB2_AUTOCOMMIT_ON);

実践的な使用例

例1:銀行送金システムの例 💰

// 自動コミットをOFFに
db2_autocommit($connection, DB2_AUTOCOMMIT_OFF);

try {
    // Aさんの口座から1万円引く
    db2_exec($connection, "UPDATE accounts 
                          SET balance = balance - 10000 
                          WHERE account_id = 'A'");

    // Bさんの口座に1万円加える
    db2_exec($connection, "UPDATE accounts 
                          SET balance = balance + 10000 
                          WHERE account_id = 'B'");

    // 問題なければ確定
    db2_commit($connection);
    echo "送金成功!";

} catch (Exception $e) {
    // エラーがあれば変更を取り消し
    db2_rollback($connection);
    echo "送金失敗:" . $e->getMessage();
}

例2:商品在庫管理の例 📦

db2_autocommit($connection, DB2_AUTOCOMMIT_OFF);

try {
    // 在庫を減らす
    db2_exec($connection, "UPDATE products 
                          SET stock = stock - 1 
                          WHERE product_id = 123");

    // 注文履歴に追加
    db2_exec($connection, "INSERT INTO orders 
                          (product_id, quantity) 
                          VALUES (123, 1)");

    db2_commit($connection);
    echo "注文処理完了!";

} catch (Exception $e) {
    db2_rollback($connection);
    echo "注文処理失敗!";
}

メリット・デメリット

メリット 👍

  • データの整合性が保てる
  • 複数の処理をまとめて行える
  • エラー時に安全に元に戻せる

デメリット 👎

  • 処理が少し遅くなる可能性がある
  • コードが複雑になる

使い分けのポイント

自動コミットONが適している場合

  • 単純な1つの処理
  • データの整合性をそれほど気にしなくていい場合
db2_autocommit($connection, DB2_AUTOCOMMIT_ON);
db2_exec($connection, "UPDATE logs SET access_time = CURRENT TIMESTAMP");

自動コミットOFFが適している場合

  • 複数のテーブルを更新する処理
  • お金に関する処理
  • データの整合性が重要な処理

まとめ

  1. 自動コミットON/OFFの使い分けが重要
  2. 重要なデータ処理の場合は必ずOFFにする
  3. try-catchでエラー処理を忘れずに
  4. commitとrollbackをセットで考える

これでdb2_autocommitの基本は押さえられたと思います!データの整合性を保ちながら、安全なデータベース処理を実装していきましょう!

では、Happy Coding! 😊

タイトルとURLをコピーしました