Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in MySQL-Transaktionswissen (Codebeispiel)

Detaillierte Einführung in MySQL-Transaktionswissen (Codebeispiel)

不言
不言nach vorne
2019-02-01 10:39:262663Durchsuche

Der Inhalt dieses Artikels ist eine detaillierte Einführung (Codebeispiele) zum Wissen über MySQL-Transaktionen. Ich hoffe, dass er für Sie hilfreich ist . hat geholfen.

MySQL-Transaktionen und Transaktionsisolationsstufen

MySQL-Transaktionen werden hauptsächlich zur Verarbeitung von Daten mit großen Vorgängen und hoher Komplexität verwendet. Wenn Sie beispielsweise im Personalverwaltungssystem eine Person löschen, werden die grundlegenden Informationen der Person sowie die mit der Person verbundenen Informationen wie Postfach, Artikel usw. gelöscht. Diese Datenbankbetriebsanweisungen stellen eine Transaktion dar (empfohlener Kurs: MySQL-Tutorial)

    • Nur ​​Datenbanken oder Tabellen, die die Innodb-Datenbank-Engine in MySQL verwenden, unterstützen Transaktionen

    • Transaktionsverarbeitung kann verwendet werden, um die Integrität der Datenbank aufrechtzuerhalten und sicherzustellen, dass Stapel von SQL-Anweisungen entweder alle ausgeführt oder nicht ausgeführt werden

    • Transaktionen werden zum Verwalten von Einfügungen, Aktualisierungen usw. verwendet. und Löschanweisungen

  • Im Allgemeinen müssen Transaktionen 4 Bedingungen erfüllen: Atomizität, Konsistenz, Isolation, Haltbarkeit

    • Atomizität: Alle Vorgänge in einer Transaktion werden entweder alle ausgeführt oder keine werden ausgeführt und landen nicht irgendwo in der Mitte. Wenn während der Ausführung der Transaktion ein Fehler auftritt, wird sie auf den Zustand vor Beginn der Transaktion zurückgesetzt

    • Konsistenz: Vor Beginn der Transaktion und nach dem Wenn die Transaktion endet, wird die Integrität der Sex-Datenbank nicht beeinträchtigt. Dies bedeutet, dass die geschriebenen Daten vollständig allen voreingestellten Regeln entsprechen müssen, einschließlich der Genauigkeit und Verkettung der Daten, und die nachfolgende Datenbank die geplante Arbeit spontan abschließen kann

    • Isolationseigenschaften : Die Datenbank ermöglicht mehreren gleichzeitigen Transaktionen das gleichzeitige Lesen, Schreiben und Ändern ihrer Daten. Durch die Isolierung können Dateninkonsistenzen aufgrund von Kreuzausführungen verhindert werden, wenn mehrere Transaktionen gleichzeitig ausgeführt werden. Die Transaktionsisolation ist in verschiedene Ebenen unterteilt, darunter „Lesen nicht festgeschrieben“, „Lesen festgeschrieben“, „wiederholbares Lesen“ und „Serialisierbar“

    • Persistenz: Transaktionsverarbeitung Nach Abschluss erfolgt die Änderung an den Daten dauerhaft und geht auch bei einem Systemausfall nicht verloren

Unter der Standardeinstellung der MySQL-Befehlszeile werden Transaktionen automatisch übermittelt, also der COMMIT-Vorgang wird unmittelbar nach der Ausführung der SQL-Anweisung ausgeführt. Um eine Transaktion explizit zu starten, müssen Sie daher den Befehl BEGIN oder START TRANSACTION verwenden oder den Befehl SET AUTOCOMMIT=0 ausführen, um die Verwendung der automatischen Übermittlung des aktuellen Gemäldes zu deaktivieren

Transaktionskontrollanweisung :

  • BEGIN oder START TRANSACTION; Explizit eine Transaktion starten

  • COMMIT; ARBEIT, beide gleichwertig. COMMIT schreibt die Transaktion fest und macht alle Änderungen an der Datenbank dauerhaft.

  • ROLLBACK; das Äquivalent ist auch ROLLBACK WORK. Rollback beendet die Transaktion des Benutzers und macht alle laufenden, nicht festgeschriebenen Änderungen rückgängig

  • SAVEPOINT-Kennung SAVEPOINT ermöglicht die Erstellung einer Speicherung innerhalb eines Transaktionspunkts, einer Transaktion kann mehrere SAVEPOINT-Bezeichner haben

  • RELESE SAVEPOINT-Kennung; Wenn es keinen angegebenen Speicherpunkt gibt, löst die Ausführung dieser Anweisung eine Ausnahme aus

  • ROLLBACK TO identifiziert;Rolle die Transaktion zum markierten Punkt zurück

  • SET TRANSACTION ; die Isolationsstufe der Transaktion. Die von der InnoDB-Speicher-Engine bereitgestellten Transaktionsisolationsstufen umfassen READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE

Es gibt zwei Hauptmethoden für die MySQL-Transaktionsverarbeitung:

  1. Verwenden Sie BEGIN, ROLLBACK, COMMIT zum Implementieren

  • BEGINStarten Sie eine Transaktion

  • ROLLBACKTransaktions-Rollback

  • COMMITTransaktionsbestätigung

  • Direct SET So ändern Sie den automatischen Übermittlungsmodus von MySQL:

    • SET AUTOCOMMIT=0 deaktiviert die automatische Übermittlung

    • SET AUTOCOMMIT=1 schaltet die automatische Übermittlung ein

    Eines der vier Hauptmerkmale von Transaktionen: Isolation

    1. Es besteht ein gewisser Grad an Isolation zwischen Transaktion A und Transaktion B

    2. nicht festgeschrieben lesen

    • Auf dieser Isolationsstufe können alle Transaktionen die Ausführungsergebnisse anderer nicht festgeschriebener Transaktionen sehen. Diese Isolationsstufe wird in praktischen Anwendungen selten verwendet. Das Lesen nicht festgeschriebener Daten wird als schmutzige Daten bezeichnet

  • COMMIT lesen

    • Die Standardisolationsstufe für die meisten Datenbanksysteme (Aber nicht MySQL). Eine Transaktion kann nur Änderungen sehen, die von festgeschriebenen Transaktionen vorgenommen wurden. Es vermeidet Dirty Reads, aber es gibt immer noch Probleme mit nicht wiederholbaren Reads und Phantom Reads

  • wiederholbaren Reads

    • Die Standardebene von MySQL stellt sicher, dass mehrere Instanzen derselben Transaktion beim gleichzeitigen Lesen von Daten dieselben Datenzeilen sehen. Schmutzige Lesevorgänge und nicht wiederholbare Lesevorgänge werden vermieden, es tritt jedoch ein weiteres Problem auf: Phantom-Lesevorgänge. Phantomlesen bedeutet, dass, wenn der Benutzer einen bestimmten Bereich von Datenzeilen liest, eine andere Transaktion eine neue Zeile in den Bereich einfügt. Wenn der Benutzer die Datenzeilen im Bereich erneut liest, wird eine neue Phantomzeile gefunden. InnoDB- und Falcon-Speicher-Engines lösen dieses Problem durch den MVCC-Mechanismus (Multi-Version Concurrency Control)

    • Der MVCC-Mechanismus wird unter der Isolationsstufe wiederholbares Lesen und Auswählen verwendet Der Vorgang wird nicht aktualisiert. Die Versionsnummer ist ein Snapshot-Lesevorgang (historische Version). Durch Einfügen, Aktualisieren und Löschen wird die aktuelle Leseversion (aktuelle Version) aktualisiert

  • serialisierbar

    • Die höchste Isolationsstufe, indem Transaktionen so angeordnet werden müssen, dass sie nicht miteinander in Konflikt geraten können, wodurch das Phantomleseproblem gelöst wird. Kurz gesagt, es fügt jeder gelesenen Datenzeile eine gemeinsame Sperre hinzu. Auf dieser Ebene kann es zu einer großen Anzahl von Zeitüberschreitungen und Sperrkonflikten kommen

    Legen Sie die Transaktionsisolationsstufe fest

    1. Einstellen die my.cnf-Datei

    - READ-UNCOMMITTED
    - READ-COMMITED
    - REPEATABLE-READ
    - SERIALIZABLE
    * 例如
    [mysqlId]
    transaction-isolation = READ-COMMITTED
    1. Den Isolationsgrad dynamisch über Befehle festlegen

    SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
    其中isolation-level可以是:
    - READ UNCOMMITTED
    - READ COMMITTED
    - REPEATABLE READ
    - SERIALIZABLE
    
    GLOBAL|SESSION表示事务隔离级别的作用范围:
    GLOBAL:表示对所有会话有效
    SESSION:表示对当前会话有效

    Probleme mit der Parallelität von Transaktionen

    1. Dirty Read: Transaktion A liest die von Transaktion B aktualisierten Daten, und dann macht B den Vorgang rückgängig, dann sind die von A gelesenen Daten Dirty Data

    2. Nicht wiederholbares Lesen: Transaktion A liest dieselben Daten mehrmals, und Transaktion B aktualisiert die Daten, übermittelt sie jedoch nicht während der mehrfachen Lesevorgänge von Transaktion A. Infolgedessen liest Transaktion A dieselben Daten mehrmals und die Ergebnisse sind inkonsistent

    3. Phantomlesung: Die Anzahl der vorher und nachher gelesenen Datenelemente ist inkonsistent. Dies liegt daran, dass Transaktion B während der mehrfachen Lesevorgänge von Transaktion A Einfüge- oder Löschvorgänge für die Tabelle ausführt

    Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in MySQL-Transaktionswissen (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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