Maison > base de données > tutoriel mysql > le corps du texte

Les transactions PHP simultanées dans PDO MySQL peuvent-elles interférer les unes avec les autres ?

Linda Hamilton
Libérer: 2024-11-01 04:43:27
original
375 Les gens l'ont consulté

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

Comprendre l'isolation des transactions dans PDO MySQL

La documentation PHP met en évidence les avantages des transactions, en soulignant leur capacité à garantir des opérations atomiques, cohérentes, isolées et durables au sein d'une base de données .

Question :

Cela implique-t-il que des scripts PHP distincts exécutant des transactions simultanément peuvent fonctionner sans interférence ?

Élaboration sur les interférences :

Considérez la table des employés avec les données suivantes :

id name salary
1 ana 10000

Deux scripts avec un code similaire s'exécutent simultanément :

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>
Copier après la connexion

La question se pose concernant le salaire résultant d'«ana» selon différents scénarios d'exécution.

Réponse :

Le résultat dépend du niveau d'isolement configuré pour le moteur de table InnoDB dans MySQL. Quatre niveaux d'isolement existent selon le standard SQL :

  • READ UNCOMMITTED : Permet de lire les données non validées. Les transactions simultanées peuvent interférer les unes avec les autres.
  • LECTURE COMMITTED : Permet de lire uniquement les données validées par d'autres transactions. Les transactions simultanées n'interfèrent généralement pas.
  • LECTURE RÉPÉTABLE : Empêche d'autres transactions de modifier les données lues par la transaction en cours. Les transactions simultanées peuvent toujours interférer si elles tentent de modifier les mêmes données.
  • SÉRIALISABLE : Garantit que les transactions s'exécutent de manière série, empêchant toute interférence entre les transactions simultanées.

Dans le scénario donné, l'utilisation du niveau d'isolement SERIALIZABLE et la désactivation de la validation automatique entraîneront un salaire de 12 000 car chaque transaction est isolée et exécutée séquentiellement.

Cependant, avec tout autre niveau d'isolation ou SERIALIZABLE avec la validation automatique activée , le résultat sera 11 000. En effet, les transactions peuvent se chevaucher dans ces cas, ce qui permet des interférences potentielles. L'utilisation de lectures verrouillées peut également affecter le résultat, conduisant potentiellement à un salaire de 12 000 sous tous les niveaux d'isolement.

Par conséquent, le niveau d'isolement spécifique et les paramètres de configuration utilisés détermineront l'interférence ou l'absence d'interférence entre les transactions simultanées dans les scripts PHP. .

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!