Heim > Datenbank > MySQL-Tutorial > Hauptteil

Können gleichzeitige PHP-Transaktionen in PDO MySQL einander stören?

Linda Hamilton
Freigeben: 2024-11-01 04:43:27
Original
376 Leute haben es durchsucht

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

Transaktionsisolation in PDO MySQL verstehen

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>
Nach dem Login kopieren

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:

  • READ UNCOMMITTED: Ermöglicht das Lesen nicht festgeschriebener Daten. Gleichzeitige Transaktionen können sich gegenseitig stören.
  • COMMITTED LESEN: Ermöglicht nur das Lesen von Daten, die von anderen Transaktionen festgeschrieben wurden. Gleichzeitige Transaktionen stören normalerweise nicht.
  • WIEDERHOLBARES LESEN: Verhindert, dass andere Transaktionen die von der aktuellen Transaktion gelesenen Daten ändern. Gleichzeitige Transaktionen können immer noch stören, wenn sie versuchen, dieselben Daten zu ändern.
  • SERIALISIERBAR: Stellt sicher, dass Transaktionen seriell ausgeführt werden, wodurch Störungen zwischen gleichzeitigen Transaktionen verhindert werden.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!