こんにちは!今回は、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が適している場合
- 複数のテーブルを更新する処理
- お金に関する処理
- データの整合性が重要な処理
まとめ
- 自動コミットON/OFFの使い分けが重要
- 重要なデータ処理の場合は必ずOFFにする
- try-catchでエラー処理を忘れずに
- commitとrollbackをセットで考える
これでdb2_autocommit
の基本は押さえられたと思います!データの整合性を保ちながら、安全なデータベース処理を実装していきましょう!
では、Happy Coding! 😊