トランザクションはデータベースの操作において非常に重要な機能であり、1 つまたは一連の SQL ステートメントをスケジュールし、実行プロセス中にそれらのステートメントの 1 つが実行に失敗した場合に、それらをすべてロールバックできます。変更された操作が正常に実行されると、トランザクションは永続的に有効になり、データベース操作時の非同期の問題が解決されると同時に、トランザクションを通じて大量のデータを実行する際の実行効率が向上します。大幅に改善されました。
トランザクション処理の機能はPDOでも実現できます
1: トランザクションを開きます: beginTransaction()メソッド
beginTransaction()メソッドは、トランザクションが終了するまで自動コミットモードをオフにします送信またはロールバック後に復元
2: 物事の送信: commit() メソッド
commit() メソッドは物事の送信操作を完了し、成功した場合は true を返し、そうでない場合は false を返します。
3: モノのロールバック: rollBack() メソッド
rollBack() メソッドは、モノのロールバック操作を実行します。
例:
$dbms='mysql';//数据库类型 $dbName='admin';//使用的数据库 $user='root';//数据库连接用户名 $pwd='password';//数据库连接密码 $host='localhost';//数据库主机名 $dsn="$dbms:host=$host;port=3306;dbname=$dbName"; try { $pdo = new PDO($dsn, $user, $pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->beginTransaction();//开启事物 $query = "insert into user (username,password) values('admin','123456')";//需要执行的sql语句 $res = $pdo->prepare($query); if ($res->execute()) { echo "数据添加成功"; }else{ echo "数据添加失败"; } $pdo->commit();//执行事物的提交操作 }catch(PDOException $e){ die("Error!: ".$e->getMessage().'<br>'); $pdo->rollBack();//执行事物的回滚操作 }
追加:
データベーストランザクションは、完全に実行されたか、まったく実行されなかった、単一の論理的な作業単位として実行される一連の操作を指します。
トランザクション処理では、トランザクション単位内のすべての操作が正常に完了しない限り、データ指向のリソースが永続的に更新されないようにします。関連する操作のセットを、すべて成功するかすべて失敗するユニットに結合することで、エラー回復を簡素化し、アプリケーションの信頼性を高めることができます。論理作業単位がトランザクションになるには、いわゆる ACID (原子性、一貫性、分離性、耐久性) プロパティを満たす必要があります。
トランザクションとはデータベース操作における論理的な作業単位であり、DBMSのトランザクション管理サブシステムがトランザクション処理を担当します。
関連プロパティ:
アトミック (アトミック性)
トランザクションはデータ変更のアトミックな作業単位である必要があり、すべてが実行されるか、まったく実行されません。通常、トランザクションに関連付けられた操作には共通の目標があり、相互に依存しています。システムがこれらの操作のサブセットのみを実行すると、トランザクションの全体的な目的が損なわれる可能性があります。アトミック性により、システムが操作のサブセットを処理する可能性が排除されます。
一貫性(一貫性)
トランザクションが完了したとき、すべてのデータは一貫性を保たなければなりません。関連するデータベースでは、すべてのデータの整合性を維持するために、トランザクションの変更にすべてのルールを適用する必要があります。トランザクションの終了時には、すべての内部データ構造 (B ツリー インデックスや二重リンク リストなど) が正しい必要があります。整合性を維持する責任の一部はアプリケーション開発者にあり、アプリケーション開発者は、アプリケーションが既知の整合性制約をすべて強制していることを確認する必要があります。たとえば、送金アプリケーションを開発する場合は、送金プロセス中に小数点を任意に移動しないようにする必要があります。
隔離(Isolation)
同時トランザクションによって行われた変更は、他の同時トランザクションによって行われた変更から隔離されなければなりません。トランザクションがデータを表示するときのデータの状態は、別の同時トランザクションによって変更される前の状態、または別のトランザクションによってデータが変更された後の状態のいずれかになります。トランザクションは中間状態のデータを表示しません。これは、開始データを再ロードし、一連のトランザクションを再実行して、データが元のトランザクション実行と同じ状態になるようにできるため、分離と呼ばれます。トランザクションがシリアル化可能な場合、最高の分離レベルが実現されます。このレベルでは、並列実行できる一連のトランザクションから得られる結果は、各トランザクションを直列に実行して得られる結果と同じです。分離性を高くすると、並行して実行できるトランザクションの数が制限されるため、一部のアプリケーションではスループットの向上と引き換えに分離レベルを下げます。
永続性(期間)
トランザクションが完了した後、システムへの影響は永続的です。この変更は、致命的なシステム障害が発生した場合でも持続します。
以上、PDO におけるトランザクション処理を内容も含めて紹介しましたが、PHP チュートリアルに興味のある方の参考になれば幸いです。