トランザクション内で失敗するはずの処理がロールバックしませんでした

2017年11月14日
ユーザー

レッスンと同じソースで

$db->beginTransaction();
$db->exec("update users set score = score - 10 where name = 'taguchi'");
$db->exec("update users set score = score + 10 where name = 'fkoji333'");
$db->commit();

というコードを試してみたのですが、単に taguchi さんのスコアが更新されるだけでロールバックが発生しませんでした。トランザクションは「一連の処理が必ず行われる事を保障」するものであり、fkoji333 のレコードはデータベースに存在しないため、処理に失敗して Exception が出ることを期待していたのですが、なぜ Exception が発生せず、処理がロールバックしなかったのでしょうか。

この回答を見るにはプレミアムサービスへの登録が必要です

プレミアムサービスとは?