ホームページ > データベース > mysql チュートリアル > 2 つの PHP スクリプトは干渉せずにトランザクションを同時に実行できますか?

2 つの PHP スクリプトは干渉せずにトランザクションを同時に実行できますか?

Patricia Arquette
リリース: 2024-10-28 12:42:31
オリジナル
377 人が閲覧しました

 Can Two PHP Scripts Run Transactions Simultaneously Without Interfering?

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>
ログイン後にコピー

イベントのシーケンス

これを想像してください。シナリオ:

  1. script1.php がデータを選択します。
  2. script2.php がデータを選択します。
  3. script1.php がデータを更新します。
  4. script2.phpデータを更新します。
  5. script1.php コミット。
  6. script2.php コミット。

考えられる結果

によって異なりますMySQL の分離レベルとロック読み取りの使用により、「ana」の給与は次のいずれかになります:

  • 11000: より低い分離レベルまたは非ロックによりトランザクションが重複します。 reads.
  • 12000: より高い分離レベルまたは読み取りのロックにより、トランザクションは個別に実行されます。

結論

同時トランザクションの結果は、分離レベルと MySQL でのロック読み取りの使用によって異なります。これらの概念を理解することは、複数のスクリプトによって実行されるトランザクション間の干渉を防ぐために不可欠です。

以上が2 つの PHP スクリプトは干渉せずにトランザクションを同時に実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート