Heim  >  Artikel  >  Datenbank  >  Zusammenfassung der ACID-Merkmale und Parallelitätsprobleme von MySQL-Transaktionen

Zusammenfassung der ACID-Merkmale und Parallelitätsprobleme von MySQL-Transaktionen

WBOY
WBOYnach vorne
2022-07-25 17:39:182312Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL. Er stellt hauptsächlich die ACID-Eigenschaften von MySQL-Transaktionen und Parallelitätsproblemlösungen vor. Der Artikel bietet einen gewissen Referenzwert. Ich hoffe, es wird für alle hilfreich sein.

Zusammenfassung der ACID-Merkmale und Parallelitätsprobleme von MySQL-Transaktionen

Empfohlenes Lernen: MySQL-Video-Tutorial

1. Das Konzept der Transaktion

Eine Transaktion ist eine unteilbare Einheit, die aus einer oder mehreren SQL-Anweisungen besteht, die nur dann auf der Datenbank ausgeführt werden, wenn die Transaktion die gesamte Transaktion ist wird erst dann an die Datenbank übermittelt, wenn alle Vorgänge normal ausgeführt wurden. Wenn ein Teil der Transaktion fehlschlägt, wird die Transaktion auf den ursprünglichen Zustand zurückgesetzt. Daher wird die Transaktion entweder alle erfolgreich ausgeführt oder schlägt fehl.

Daher sollten Sie sich einige grundlegende Konzepte von Transaktionen merken:

Eine Transaktion ist die Ausführung einer Reihe von SQL-Anweisungen. Dies stellt sicher, dass sie entweder alle erfolgreich sind oder fehlschlagen die Atomizität der Transaktionsausführung. Erst wenn alle SQL-Anweisungen der Transaktion erfolgreich ausgeführt wurden, kann die Transaktion festgeschrieben und die Ergebnisse auf die Festplatte geschrieben werden. Wenn während der Transaktionsausführung einige SQL-Fehler auftreten, muss die Transaktion auf den ursprünglichen Zustand zurückgesetzt werden.

Zum Beispiel erfordert das Transfergeschäft, dass mehrere SQL-Anweisungen zusammen ausgeführt werden. Erst wenn diese SQL-Anweisungen erfolgreich ausgeführt werden, kann das Geschäft als erfolgreich angesehen werden.

Die Transaktionsverarbeitung hat drei Zustände:

begin: Alle zum Öffnen einer Transaktion auszuführenden SQL-Anweisungen sind erfolgreich, und commitübergibt eine Transaktion, wenn eine der SQL-Anweisungen vorliegt ein Stromausfall oder Server Wenn ein Fehler auftritt, der zu einer SQL-Ausführungsausnahme führt, wird die Transaktion nicht übermittelt, die Transaktion wird zurückgesetzt (Rollback) und die Daten werden auf den Zustand vor Beginn der Transaktion zurückgesetzt

Dies wird durch die Speicher-Engine garantiert (garantiert durch Redo-Log und Undo-Log).

Die MyISAM-Speicher-Engine unterstützt keine Transaktionen, während die InnoDB-Speicher-Engine Transaktionen und Zeilensperren unterstützt.

Verwenden Sie show engineG, um zu überprüfen, welche Speicher-Engines von der aktuellen Datenbank unterstützt werden.

show enginesG查看当前数据库支持哪些存储引擎。

select @@autocommit;

select @@autocommit;Einstellungen für den Transaktions-Commit-Status anzeigen<img alt="" src="https://img.php.cn/upload/article/000/000/067/a436295269b7a6438302b813398a2dde-3.png">

Die Datenbank-Engine kann vorübergehend über Befehle oder dauerhaft über Konfigurationsdateien geändert werden.

Wenn unser Geschäft Transaktionen umfasst, steuern wir diese Variable normalerweise im Code. Im Allgemeinen bestehen unsere Transaktionen aus mehreren SQLs und müssen die Atomizität der Transaktion erfüllen, daher stellen wir sie auf manuelle Übermittlung ein. Wenn das Geschäft erfolgreich ist, wird die Transaktion übermittelt; wenn während des Geschäfts ein Fehler auftritt, wird eine Transaktion zurückgesetzt.

2. ACID-Merkmale

Jede Transaktion muss die folgenden 4 Merkmale erfüllen: 🎜🎜

Die Atomizität (Atomar) einer Transaktion: Eine Transaktion ist ein unteilbares Ganzes. Die Transaktion muss atomare Eigenschaften haben, und wenn die Transaktion geändert wird, wird entweder alles oder keines ausgeführt, also teilweise Der Abschluss der Transaktion ist nicht zulässig. Konsistenz von Transaktionen(Konsistenz): Vor und nach der Ausführung einer Transaktion müssen die Datenbankdaten einen konsistenten Zustand beibehalten. Der Konsistenzstatus der Datenbank muss in der Verantwortung des Benutzers liegen und durch den Parallelitätskontrollmechanismus implementiert werden. Nehmen wir als Beispiel den Online-Einkauf: Erst wenn die Ware das Lager verlässt und der Kunde in den Warenkorb legt, kann eine vollständige Transaktion abgeschlossen werden. (Konsistenz spiegelt sich nicht nur in Transaktionen wider, sondern umfasst auch die Einführung von MySQL in der Speicherschicht. Um die Zugriffseffizienz von Hotspot-Daten zu verbessern, wird im Allgemeinen eine Cache-Schicht Redis oder Memery-Cache hinzugefügt, um die Hotspot-Daten zwischenzuspeichern (Konsistenzproblem der Daten der Cache-Schicht und der Datenbank-DB-Schicht) Isolierung von Transaktionen (Isolution): Wenn zwei oder mehr Transaktionen gleichzeitig ausgeführt werden, werden die Vorgänge innerhalb einer Transaktion von den Vorgängen anderer Transaktionen isoliert, um die Datensicherheit zu gewährleisten Transaktionen und werden nicht von anderen Transaktionen beeinflusst verhindert, dass sich die gleichzeitig ausgeführten Transaktionen gegenseitig beeinflussen . Isolationsstufe: Datensicherheit und Transaktionsparallelität. Je strenger die Isolation, desto höher die Sicherheit und desto geringer die Parallelität (dh Parallelitätskontrolle, Gewährleistung der Datensicherheit). Haltbarkeit der Transaktion: Nachdem die Transaktion abgeschlossen ist (die Transaktionsfestschreibung ist erfolgreich), garantiert das DBMS dies Behalten Sie die Daten in der Datenbank. Die Änderung ist dauerhaft. Auch wenn die Datenbank aufgrund eines Fehlers ausfällt, sollten die Daten wiederhergestellt werden können. Das Wichtigste an MySQL ist das Protokoll, nicht die Daten!

Die ACD-Funktion von Transaktionen wird durch die Redo-Log- und Undo-Log-Mechanismen von MySQL gewährleistet. Die Isolation wird durch den Sperrmechanismus von MySQL-Transaktionen gewährleistet.

3. Probleme mit der Transaktionsparallelität

Die folgenden Probleme treten normalerweise auf, wenn Transaktionen gleichzeitig ausgeführt werden:

Dirty Read: Eine Transaktion liest nicht festgeschriebene Daten einer anderen Transaktion. Wenn beispielsweise Transaktion A und Transaktion B gleichzeitig ausgeführt werden, fragt Transaktion B nach der Aktualisierung von Transaktion A die nicht festgeschriebenen Daten von A ab und liest sie. Zu diesem Zeitpunkt wird Transaktion A zurückgesetzt und die von Transaktion B gelesenen Daten sind ungültige fehlerhafte Daten (

Transaktion B liest die nicht festgeschriebenen Daten von Transaktion A

) Nicht wiederholbares Lesen (Nicht wiederholbares Lesen): Der Vorgang einer Transaktion führt dazu, dass eine andere Transaktion davor und danach zweimal unterschiedliche Daten liest. Wenn beispielsweise Transaktion A und Transaktion B gleichzeitig ausgeführt werden, aktualisiert Transaktion A die von Transaktion B abgefragten Daten, nachdem Transaktion B Daten abgefragt und gelesen hat. Zu diesem Zeitpunkt liest Transaktion B die Daten erneut und stellt fest, dass die Daten vor und zweimal gelesen wurden danach sind nicht dasselbe. (

Transaktion B liest die übermittelten Daten von Transaktion A

) Phantom Read(Phantom Read) Phantom Read: Der Vorgang einer Transaktion führt dazu, dass die Datenmenge der Ergebnisse der beiden Abfragen vor und nach einer anderen Transaktion unterschiedlich ist. Wenn beispielsweise Transaktion A und Transaktion B gleichzeitig ausgeführt werden, nachdem Transaktion B Daten abgefragt und gelesen hat, fügt Transaktion A einen Datensatz hinzu oder löscht ihn, der die Abfragebedingungen von Transaktion B erfüllt. Zu diesem Zeitpunkt fragt Transaktion B erneut ab und stellt fest, dass die vorherige Die Abfrage hat keine vorhandenen Datensätze oder einige Datensätze aus der vorherigen Abfrage fehlen. (Transaktion B hat die neu hinzugefügten Daten von Transaktion A gelesen oder kann die von Transaktion A gelöschten Daten nicht lesen)Dirty Reading muss eliminiert werden, da die Transaktion nicht festgeschrieben ist. In einigen Szenarien sind nicht wiederholbare Lesevorgänge und Phantom-Lesevorgänge zulässig (die Transaktion wurde festgeschrieben), müssen jedoch nicht eliminiert werden (durch Festlegen unterschiedlicher Isolationsstufen), was durch die Anforderungen des Anwendungsszenarios bestimmt wird. 4. Transaktionsbezogene Befehle

Überprüfen Sie, ob MySQL Transaktionen automatisch übermittelt.

select @@autocommit;0 bedeutet manuelle Übermittlung von Transaktionen, 1 bedeutet automatische Übermittlung von Transaktionen. Stellen Sie die Transaktionsübermittlungsmethode auf manuelle Übermittlung ein (betrifft nur die aktuelle Sitzung):

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonZusammenfassung der ACID-Merkmale und Parallelitätsprobleme von MySQL-Transaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen