Sabel_Db_Transaction::activate(); // 開始
try {
// 更新処理1
...
// 更新処理2
...
Sabel_Db_Transaction::commit(); // 終了
} catch (Exception $e) {
Sabel_Db_Transaction::rollback(); // 破棄
throw $e;
}
上記のコードでは、更新処理2が実行される時には更新処理1が終わっているはずですが、これは一時的なものであり、データベースに完全に反映されている状態ではありません。更新処理2も正常に終了すれば、トランザクションが終了(コミット)され、データベースに完全に反映されます。しかし、更新処理2が失敗(例外が発生)すれば、トランザクションの一時的な状態は破棄(ロールバック)され、更新処理1は無かったこととなります。
1: Sabel_Db_Transaction::activate();
2:
3: try {
4: // 更新処理1(db1)
5: ...
6:
7: // 更新処理2(db2)
8: ...
9:
10: Sabel_Db_Transaction::commit();
11: } catch (Exception $e) {
12: Sabel_Db_Transaction::rollback();
13: throw $e;
14: }
| クラス定数 | Oracle (SQL) |
MySQL PostgreSQL (SQL) |
Firebird (PHP定数) |
Sqlite |
|---|---|---|---|---|
| READ_UNCOMMITTED | READ COMMITTED | READ UNCOMMITTED |
IBASE_WRITE | IBASE_COMMITTED | IBASE_REC_VERSION | IBASE_WAIT |
- |
| READ_COMMITTED | READ COMMITTED | READ COMMITTED |
IBASE_WRITE | IBASE_COMMITTED | IBASE_REC_NO_VERSION | IBASE_WAIT |
- |
| REPEATABLE_READ | SERIALIZABLE | REPEATABLE READ |
IBASE_WRITE | IBASE_CONCURRENCY | IBASE_WAIT |
- |
| SERIALIZABLE | SERIALIZABLE | SERIALIZABLE |
IBASE_WRITE | IBASE_CONSISTENCY | IBASE_WAIT |
- |
Sabel_Db_Transaction::activate(Sabel_Db_Transaction::SERIALIZABLE);