0
0

More than 1 year has passed since last update.

PHP beginTransaction 整合性 ACID特性

Posted at
index.php

~~~~~~~~
//Update構文にて、お金の受け渡しを想定したケース

try{
$cone->beginTransaction;

$psn->execute([
  :name => $A_user, //佐藤さん(剛田さんへお金渡す人)
  :money => -1 * $money //-2000円の値が入ってます。
]);

$psn->execute ([
  :name => $B_user, //剛田さん(佐藤さんからお金受け取る人)
  :money => $money //2000円の値が入っています。
]);

$cone->commit();
}catch(PDOExcetion $e){

echo $e->getMessage();
$cone->rollback();

}

説明

①今回のケースでは、「佐藤さん」は「剛田さん」にお金を2000円振り込むケースです。

②トランザクションを用いずこのケースを処理しようとした場合

 A.正常に問題なく処理が行われる。

 B.佐藤さんの処理は正常に行われたが、剛田さんの処理はエラーとなり、佐藤さんの口座から-2000円となっていて整合性が保てなくなる。

C.剛田さんの処理は正常に行われたが、佐藤さんの処理はエラーとなり、剛田さんの口座が何故か+2000円となって整合性が保てなくなる。

③ ②のケースを解消する方法がトランザクションです。
 try catchで処理を囲み、正常に処理が進んだ場合、最後まで(commit)処理が実行されDBは更新されます。
但し、途中で処理が中止(エラー)となった場合、catch処理内の処理が走り、処理が全消し(rollback)となります。

トランザクション以降に記載されたプログラムは、commitされるまで確定されません。(オートコミットオフになる)

いやー、面白い!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0