Die PHP-Dokumentation hebt die Vorteile von Transaktionen hervor und betont ihre Fähigkeit, atomare, konsistente, isolierte und dauerhafte Vorgänge innerhalb einer Datenbank sicherzustellen .
Frage:
Bedeutet dies, dass separate PHP-Skripte, die gleichzeitig Transaktionen ausführen, ohne Störungen funktionieren können?
Ausarbeitung zu Störungen:
Betrachten Sie die Tabelle Mitarbeiter mit den folgenden Daten:
id | name | salary |
---|---|---|
1 | ana | 10000 |
Zwei Skripte mit ähnlichem Code werden gleichzeitig ausgeführt:
script1.php und 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>
Es stellt sich die Frage nach dem resultierenden Gehalt von „ana“ unter verschiedenen Ausführungsszenarien.
Antwort:
Das Ergebnis hängt vom Isolationsgrad ab für die InnoDB-Tabellen-Engine in MySQL konfiguriert. Gemäß dem SQL-Standard gibt es vier Isolationsstufen:
Im gegebenen Szenario führt die Verwendung der Isolationsstufe SERIALIZABLE und das Deaktivieren von Autocommit zu einem Gehalt von 12000, da jede Transaktion isoliert und nacheinander ausgeführt wird.
Allerdings mit jeder anderen Isolationsstufe oder SERIALIZABLE mit aktiviertem Autocommit , wird das Ergebnis 11000 sein. Dies liegt daran, dass sich Transaktionen in diesen Fällen überschneiden können, was zu möglichen Interferenzen führen kann. Die Verwendung von Sperrlesevorgängen kann sich auch auf das Ergebnis auswirken und unter allen Isolationsstufen möglicherweise zu einem Gehalt von 12.000 führen.
Daher bestimmen die spezifische Isolationsstufe und die verwendeten Konfigurationseinstellungen die Interferenz oder das Fehlen einer solchen zwischen gleichzeitigen Transaktionen in PHP-Skripten .
Das obige ist der detaillierte Inhalt vonKönnen gleichzeitige PHP-Transaktionen in PDO MySQL einander stören?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!