Heim  >  Artikel  >  Datenbank  >  Über MySQL-Transaktionen

Über MySQL-Transaktionen

一个新手
一个新手Original
2017-10-13 10:30:141298Durchsuche

1》Worauf bezieht sich die Transaktion?
     Transaktionen können als eine Geschäftslogik-Verarbeitungseinheit betrachtet werden, die entweder ausgeführt oder nicht ausgeführt wird (Konsistenz)
Es gibt 3.000 Yuan auf dem A-Konto, das B-Konto ist 2000 schnell,
-A-500 -"B
A-Konto und B-Konto sind 5000 schnell
vor der Implementierung und Ausführung der Dinge. Danach sollten diese Summe und dieser Zustand konsistent sein.
                                    Durchgang durch in. 3 000 3000    select sun() between A B Sum
(4) Haltbarkeit (Haltbarkeit)
Garantierte Haltbarkeit:
1> Vor der Transaktion:
Die Daten wurden vor der Transaktion auf die Festplatte geschrieben. Was ist, wenn sie zurückgezogen werden müssen? Daten von der Festplatte abgerufen? Sehr langsam? Sehr schmerzhaft? was zu tun?
2 & gt; in Kombination mit dem Transaktionalisten
Melden Sie sich an, es gibt auch eine Festplatte. Was ist also der Unterschied zwischen dieser und der Datendatei?
              Unterschied: Das Transaktionsprotokoll generiert sequentielle E/A, während die Datendatei der Festplatte eine zufällige E/A ist. Jeder Vorgang des Transaktionsprotokolls wird sequentiell in einen kontinuierlichen Speicherblock auf der Festplatte geschrieben, und unsere Datendatei ist nicht so.
                                                                                              IO                                                                      (2) Datendatei: Zufällige IO-Daten. Die Daten in der Transaktion werden erneut in Datendateien implementiert. Auf diese Weise stellen wir die Persistenz der von den Dingen verwalteten Daten sicher.

3》Der Status der Transaktion.
                              Wir informieren Sie gerne über den Stand der Transaktion. Was ist eine teilweise Einreichung?
ist die Ausführung der Transaktion, ein Teil der Festplatte wurde geschrieben und der andere wird ausgeführt. Die letzte Ausführungsanweisung wurde übermittelt, das Ziel wurde jedoch nicht erreicht, was als fehlgeschlagene Transaktion bezeichnet wird ) Ausgesetzte Transaktionen
Ausgesetzt wird als „keine Übermittlung“ bezeichnet, oder auf halbem Weg wird es vorzeitig beendet, was als „Aussetzung“ bezeichnet wird.
​ (5) Eingereichte Transaktionen
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

4》Parallelität und Planung von Transaktionen

  Parallelität von Transaktionen:
    1>Durchsatz und Ressourcennutzung verbessern
                                                         Besondere Wir brauchen Transaktionen zwischen Transaktionen, um die gegenseitigen Auswirkungen zu verringern Um die Transaktion zu isolieren, was ist, wenn sie isoliert ist? Dies hängt von der Transaktionsplanung ab. Um die Isolation und Atomizität von Transaktionen sicherzustellen, sind viele Planungsmethoden erforderlich Abschließend gibt es zwei gängige Planungsstrategien:
  

Transaktionsplanung:
1 & gt; kann die Planung wiederherstellen
Im Allgemeinen führt die gegenseitige Ausführung zweier Transaktionen nicht dazu, dass sich der Status einer anderen Transaktion ändert Nennen Sie es: Wiederherstellungsplanung

2 & gt; gemeinsame Anpassung auf keiner Ebene
Wiederherstellungsplanung und Schritt für Schritt bedeutet, dass es nach dem Ende der Transaktion keine Auswirkungen zwischen ihnen gibt, insbesondere in Angelegenheiten Angelegenheiten, in Angelegenheiten, in Angelegenheiten Es wird immer noch beeinflusst, wenn die Transaktion zurückgesetzt wird, und es wird immer noch betroffen sein, wenn die Transaktion zurückgesetzt wird. Um die Auswirkungen während des Rollbacks zu vermeiden, können Sie daher auch Folgendes implementieren: kaskadieren. kostenlose Terminvereinbarung.

5》Isolierung von Transaktionen
Eine Transaktion kann mehrere Vorgänge umfassen, die übergreifend ausgeführt werden können, um die Reihenfolge besser zu planen -Ausführungen können miteinander verbunden werden. Um die Auswirkungen zwischen Transaktionen weiter zu reduzieren, gibt es vier Isolationsstufen für Transaktionen. Welche vier?
1 & gt; Nicht festgeschriebene Daten lesen
Auf der Isolationsebene können alle Transaktionen die Ausführungsergebnisse anderer nicht vorbereiteter Transaktionen sehen. Das Lesen nicht festgeschriebener Daten wird auch als „Dirty Read“ bezeichnet ;read commited read commit
Die Standardisolationsstufe der meisten Datenbanken (die Standardstufe von MySQL ist diese jedoch nicht) ), die die einfache Definition der Isolation erfüllt: Eine Transaktion kann nur Änderungen sehen, die von bereits festgeschriebenen Transaktionen vorgenommen wurden ; Wenn mehrere Instanzen gleichzeitig Daten lesen, führt dies theoretisch zu einem anderen Problem: Phantom-Lesen bezieht sich auf das Lesen eines bestimmten Bereichs als Benutzer Die Datenzeile befindet sich in diesem Bereich. Eine andere Transaktion fügt eine neue Zeile in diesem Bereich ein. Wenn der Benutzer die Datenzeile in diesem Bereich liest, findet er eine neue „Phantomzeile“
Der MVCC-Mechanismus (Concurrency Control) löst dieses Problem.

4>Serialisierbar
Dies ist der Isolationsmechanismus der höchsten Ebene. Er löst das Phantomleseproblem, indem er die Sortierung von Transaktionen erzwingt, sodass ihre Schritte miteinander in Konflikt geraten können. Einfach ausgedrückt: Es handelt sich um eine gemeinsame Sperre Auf dieser Ebene kann es zu einer großen Anzahl von Zeitüberschreitungen und Sperrkonkurrenz kommen, und unsere gleichzeitige Echtzeit-Steuerungstechnologie hängt von mehreren Technologien ab:

( 1) Sperren, Sperren schreiben, Sperren teilen (2). Sie müssen die Startzeit und die Ausführungszeit jeder Transaktion aufzeichnen (3). Isolation


zusätzliche Erweiterung:
Hungerzustand (Hunger): Wenn eine Transaktion für eine Art Sperre angewendet wird, ist sie bereit, die Parallelitätskontrolle zu erreichen Diese Sperre konnte jedoch aufgrund des Ergebnisses der Transaktionsplanung nicht erhalten werden. Darüber hinaus gibt es eine andere Art von Sperre namens Deadlock

6》Transaktion starten und zurücksetzen

Im Allgemeinen ist der Vorgang zum Starten einer Transaktion: Transaktions-Rollback
     Rollback   
3 & gt;
Commit
6.1 Angelegenheiten rollieren Tatsächlicher Vorgang:
1 & GT; Starten Sie eine Transaktion
Löschen Sie die Informationen in einer der Schülertabellen
Löschen aus student where num='4'
3>Wie führe ich eine Datenwiederherstellung durch? Transaktions-Rollback. Habe es erraten.
                                  Rollback;
                                                                        select * from student;
                                                                                                               
3>Transaktionsübermittlung
4 & gt; Rollback versuchen
Rollback
5 & gt; Überprüfen Sie, ob die Daten erneut wiederhergestellt werden können?
                                                    zu diesem Zeitpunkt ? Die Rolle der Speicherpunkte kommt zum Vorschein. Zum Beispiel: Ich speichere alle 10 Vorgänge: ​ ​ ​ ​ ​ 1> ing" in einem von Die Schülertabellen

vom Schüler löschen, wobei Name = 'xImenchuiniU'

SavePoint YYB 4 & gt; niu er "aus einem der Schülertabellen, die die Informationen vom Schüler löschen, wobei Name = 'NiUer'
löschen Savepoint yyb
5 & gt; Okay, beginnen Sie mit der Wiederherstellung
Wenn Sie Ximen Blowing Snow wiederherstellen möchten
Rollback auf YYA. Was ist der Speicherpunkt?
6 & gt; sehen Sie, ob Sie erfolgreich waren
Wählen Sie * aus Student;

6.3 Automatische Übermittlung von Transaktionen
1> Automatische Übermittlung von MySQL-Transaktionen
select @@autocommit;
mysql> select @@ autocommit;
                                                                                                                                        1 1 |
------+
                                                                                                                                                                                                                                                          1 Zeile im Satz (0,00 Sek.)


3>Testüberprüfung
                                                                                                                                                                                      Von Student löschen, wobei name='ximenchuniu'
Rollback; Und wir haben nicht explizit eine Transaktion gestartet? Transaktionen unterstützen das Rollback von DML-Anweisungen. DDL ist ein versteckter Test-Commit und wird daher leider nicht unterstützt.

Überprüfen Sie, ob der Lesevorgang nicht festgeschrieben ist:
Fragen Sie die Isolationsstufe ab, wählen Sie @@tx_isolation;
Ändern Sie die Isolationsstufe set tx_isolation='read_uncommittd ';
Ein MySQL, öffnen Sie zwei Fenster und Starten Sie eine kreuzweise Transaktion
Fenster eins und Fenster zwei gemeinsame Operationen:

1.select @@tx_isolation;

2.set tx_isolation='read_uncommittd ';

Fenster 1-Operation:
​​​​​1.Transaktion starten; Eine Cross-Transaktion starten
          2.Schülersatz alter='70' aktualisieren, wobei d_id='1010';

Fenster-2-Vorgang
        1.Transaktion starten ; Starten Sie eine Cross-Transaktion 2. Wählen Sie * aus Student; Sie können sehen, dass das 1. Fenster in 70 geändert wird und die Fenstertransaktion nicht von 2 angezeigt wird Lesen und Senden
ein MySQL, Öffnen von zwei Fenstern, beide Parteien starten gegenseitig eine Transaktion
Gemeinsame Operationen von Fenster 1 und Fenster 2:
1.select @@tx_isolation;
2.set tx_isolation= 'read_committd ';

Fenster-1-Vorgang:
1.Transaktion starten; eine Cross-Transaktion starten

2.Studentensatz alter='70' aktualisieren, wobei d_id='1010';

3 .commit; Nur hier übermittelt, in 2. Nur im dritten Schritt des Fensters werden die übermittelten Daten erneut angezeigt

Fenster 2-Vorgang
1. Transaktion starten
2. Wählen Sie * vom Schüler; Aktualisierte Daten
3. Wählen Sie * vom Schüler aus. Erst nachdem das A-Fenster 3 Schritte der Übermittlung ausgeführt hat, können Sie die aktualisierten Daten sehen, um fehlerhafte Lesevorgänge zu vermeiden.

Überprüfen Sie, ob ein MySQL gelesen werden kann, öffnen Sie zwei Fenster, und die Abfrageanweisung der beiden Parteien erhält am selben Tag eine unterschiedliche Anzahl von Datensätzen, was als Phantom-Lesen bezeichnet wird

Gemeinsame Operationen von Fenster 1 und Fenster 2:
1.select @@tx_isolation;
2.set tx_isolation='repeatable-read ';

Fenster 1-Operation
1.Transaktion starten; Starten Sie eine Cross-Transaktion
2.aktualisieren Sie den Schülersatz age='60' where num='10';
3.commit ;

Fenster-2-Vorgang
1.Starten Sie eine Transaktion; Cross-Transaktion
2.select * from student; Die aktualisierten Daten wurden in Fenster 1 nicht gesehen
3.select * from student ; 1commit;Sehe die aktualisierten Daten immer noch nicht in 1 Fenster
Zwei Fenster, beide Parteien Querstart einer Transaktion
Gemeinsame Operationen von Fenster 1 und Fenster 2:
1.select @@tx_isolation;
2.set tx_isolation='serializable';

Fenster 1-Operation
1.Transaktion starten; eine Cross-Transaktion starten
2.Studentensatz alter='60' aktualisieren, wobei num='10' nicht ausgeführt werden kann.
Fenster 2-Vorgang
1.Transaktion starten; Eine Cross-Transaktion starten
2. Hier senden, die Aktualisierung des 1. Fensters kann erfolgreich ausgeführt werden. Das ist serialisierbar!
Grund:
Wenn zwei Transaktionen kreuzweise ausgeführt werden, um dieselben Daten gleichzeitig zu ändern, muss eine Partei sie zuerst übermitteln. Andernfalls blockieren sich Lesen und Schreiben gegenseitig.

Das obige ist der detaillierte Inhalt vonÜber MySQL-Transaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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