PDO MySQL トランザクションについて: スクリプトの同時実行への影響
背景
PHP 内ドキュメントでは、トランザクションはデータベース操作の整合性と分離を保証するメカニズムとして説明されています。これらは、トランザクション内で行われた変更が他の接続からの干渉なしに安全にデータベースに適用されることを保証します。
質問
これにより、2 つの PHP が別々のものであるかどうかという疑問が生じます。スクリプトは、相互に干渉することなくトランザクションを同時に実行できます。
説明
2 つのスクリプト間の一連のイベントによって干渉が発生する可能性があります。次の例を考えてみましょう。
script1.php および script2.php
<code class="php">$conn->beginTransaction(); $stmt = $conn->prepare("SELECT * FROM employees WHERE name = ?"); $stmt->execute(['ana']); $row = $stmt->fetch(PDO::FETCH_ASSOC); $salary = $row['salary']; $salary = $salary + 1000;//increasing salary $stmt = $conn->prepare("UPDATE employees SET salary = {$salary} WHERE name = ?"); $stmt->execute(['ana']); $conn->commit();</code>
イベントのシーケンス
これを想像してください。シナリオ:
考えられる結果
によって異なりますMySQL の分離レベルとロック読み取りの使用により、「ana」の給与は次のいずれかになります:
結論
同時トランザクションの結果は、分離レベルと MySQL でのロック読み取りの使用によって異なります。これらの概念を理解することは、複数のスクリプトによって実行されるトランザクション間の干渉を防ぐために不可欠です。
以上が2 つの PHP スクリプトは干渉せずにトランザクションを同時に実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。