PDO MySQL での同時 PHP トランザクションは相互に干渉する可能性がありますか?

Linda Hamilton
リリース: 2024-11-01 04:43:27
オリジナル
375 人が閲覧しました

 Can Concurrent PHP Transactions in PDO MySQL Interfere with Each other?

PDO MySQL でのトランザクション分離を理解する

PHP ドキュメントではトランザクションの利点を強調し、データベース内でアトミックで一貫性があり、分離され、耐久性のある操作を保証するトランザクションの機能を強調しています。 .

質問:

これは、トランザクションを同時に実行する個別の PHP スクリプトが干渉なしで動作できることを意味しますか?

干渉の詳細:

次のデータを持つテーブルemployees について考えます:

id name salary
1 ana 10000

同様のコードを持つ 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>
ログイン後にコピー

さまざまな実行シナリオでの「ana」の給与の結果について疑問が生じます。

答え:

結果は分離レベルによって異なります。 MySQL の InnoDB テーブル エンジン用に構成されています。 SQL 標準に従って、4 つの分離レベルが存在します。

  • READ UNCOMMITTED: コミットされていないデータの読み取りを許可します。同時トランザクションは相互に干渉する可能性があります。
  • READ COMMITTED: 他のトランザクションによってコミットされたデータの読み取りのみを許可します。通常、同時トランザクションは干渉しません。
  • REPEATABLE READ: 現在のトランザクションによって読み取られたデータが他のトランザクションによって変更されるのを防ぎます。同時トランザクションが同じデータを変更しようとすると、依然として干渉する可能性があります。
  • SERIALIZABLE: トランザクションがシリアル方式で実行されることを保証し、同時トランザクション間の干渉を防ぎます。

指定されたシナリオでは、SERIALIZABLE 分離レベルを使用し、自動コミットを無効にすると、各トランザクションが分離されて順次実行されるため、給与は 12000 になります。

ただし、他の分離レベルまたは自動コミットが有効になっている SERIALIZABLE を使用すると、給料は 12000 になります。の場合、結果は 11000 になります。これは、これらの場合、トランザクションが重複する可能性があり、潜在的な干渉が発生する可能性があるためです。ロック読み取りの使用も結果に影響を与える可能性があり、すべての分離レベルで 12000 の給与が発生する可能性があります。

したがって、使用される特定の分離レベルと構成設定によって、PHP スクリプトの同時トランザクション間の干渉の有無が決まります。 .

以上がPDO MySQL での同時 PHP トランザクションは相互に干渉する可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!