第9章 データベース連携 / 第1回 模擬試験
PHPのデータベーストランザクションに関する次の記述のうち、正しいものはどれか。
トランザクションは、複数のSQL操作を1つの論理的な単位として扱う。
`beginTransaction()`でトランザクションを開始し、`commit()`で変更を確定する。
`rollBack()`で、トランザクション開始前の状態に戻すことができる。
上記すべて
正解
解説
3つの記述はすべて正しいです。
・トランザクションは、関連する複数のSQL操作(例: 在庫を減らす処理と注文レコードを作る処理)を1つの不可分な単位として扱う仕組みです。途中で失敗した場合、すべてなかったことにできます。
・`beginTransaction()`でトランザクションを開始し、一連の処理が成功したら`commit()`で変更を確定します。
・処理の途中でエラーが発生した場合は`rollBack()`を呼ぶことで、`beginTransaction()`を実行する前の状態に戻せます。
例:
```
try {
$pdo->beginTransaction();
$pdo->exec('UPDATE accounts SET balance = balance - 1000 WHERE id = 1');
$pdo->exec('UPDATE accounts SET balance = balance + 1000 WHERE id = 2');
$pdo->commit();
} catch (Throwable $e) {
$pdo->rollBack();
throw $e;
}
```
送金処理のように「両方成功するか、両方失敗するか」のいずれかにしたい処理では、トランザクションでの一括制御が欠かせません。
(参照: 独習PHP 第4版 第9章 データベース連携 9.8節 トランザクション処理 p.465〜467)