Maison >base de données >tutoriel mysql >Deux scripts PHP peuvent-ils exécuter des transactions simultanément sans interférer ?

Deux scripts PHP peuvent-ils exécuter des transactions simultanément sans interférer ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 12:42:31374parcourir

 Can Two PHP Scripts Run Transactions Simultaneously Without Interfering?

Comprendre les transactions PDO MySQL : impact sur l'exécution simultanée de scripts

Contexte

Dans PHP Dans la documentation, les transactions sont décrites comme des mécanismes garantissant l'intégrité et l'isolation des opérations de la base de données. Ils garantissent que toutes les modifications apportées au sein d'une transaction sont appliquées à la base de données en toute sécurité et sans interférence d'autres connexions.

Question

Cela soulève la question de savoir si deux PHP distincts les scripts peuvent exécuter des transactions simultanément sans interférer les uns avec les autres.

Explication

Le potentiel d'interférence résulte de la séquence d'événements entre les deux scripts. Prenons l'exemple suivant :

script1.php et 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>

Séquence des événements

Imaginez ceci scénario :

  1. script1.php sélectionne les données.
  2. script2.php sélectionne les données.
  3. script1.php met à jour les données.
  4. script2.php met à jour les données.
  5. script1.php s'engage.
  6. script2.php s'engage.

Résultats possibles

En fonction de Le niveau d'isolement de MySQL et l'utilisation de lectures verrouillables, le salaire résultant de 'ana' peut être soit :

  • 11000 : Les transactions se chevauchent en raison d'un niveau d'isolement inférieur ou d'un non-verrouillage lectures.
  • 12000 :Les transactions sont exécutées individuellement en raison d'un niveau d'isolement plus élevé ou de lectures verrouillées.

Conclusion

Le résultat des transactions simultanées dépend du niveau d'isolement et de l'utilisation des lectures verrouillées dans MySQL. Comprendre ces concepts est essentiel pour éviter les interférences entre les transactions exécutées par plusieurs scripts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn