Inhaltsverzeichnis
1. Auswahl des Transaktionsisolationsmechanismus
Öffnen Sie zuerst eine Transaktion und fügen Sie den Daten eine exklusive Sperre mit der ID = 7 hinzu.
Heim Datenbank MySQL-Tutorial So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

Jun 03, 2023 am 10:49 AM
mysql

    1. Auswahl des Transaktionsisolationsmechanismus

    • Wenn es uns egal ist und wir den Transaktionsisolationsmechanismus von uncommitted read verwenden und diesen Threads erlauben, die Datenbank gleichzeitig zu betreiben, werden Dirty Reads (read Uncommitted) ausgeführt Daten), nicht wiederholbares Lesen (zwei Abfragewerte sind unterschiedlich), Phantomlesen (zwei Abfragedatenvolumina sind unterschiedlich) und andere Probleme, Die Datensicherheit ist am niedrigsten, der Vorteil besteht darin, dass die Parallelitätseffizienz sehr hoch ist. im Allgemeinen nicht verwendet

    • Wenn wir alle Transaktionen serialisieren (durch Sperren implementieren) und über Sperren ordnen, ist die Parallelitätseffizienz zwar zu gering, obwohl die Datensicherheit verbessert wird, und wird im Allgemeinen nicht verwendet

      Daher verwenden wir im Allgemeinen die beiden Isolationsstufen „festgeschriebenes Lesen und wiederholbares Lesen“, die die Sicherheit, Konsistenz und Parallelitätseffizienz von Daten ausgleichen und durch die MVCC-Mehrversions-Parallelitätskontrolle (MVCC) implementiert werden. Es ist das Prinzip des festgeschriebenen Lesens und wiederholbares Lesen, und die Sperre ist das Prinzip der Serialisierung)
    • 2. Sperre auf Tabellenebene und Sperre auf Zeilenebene

      Sperre auf Tabellenebene: Sperren Sie die gesamte Tabelle. Der Overhead ist gering (da Sie den Datensatz einer bestimmten Zeile in der Tabelle nicht finden müssen, um ihn zu sperren. Wenn Sie diese Tabelle ändern möchten, beantragen Sie direkt die Sperre dieser Tabelle), die Sperre ist schnell. und es wird keinen Deadlock geben; die Sperrgranularität ist groß und es treten Sperrkonflikte mit hoher Wahrscheinlichkeit und geringer Parallelität auf.
    Sperre auf Zeilenebene: Sperren Sie eine Zeile mit Datensätzen. Es ist teuer (es muss der entsprechende Datensatz in der Tabelle gefunden werden, und es gibt einen Prozess zum Durchsuchen der Tabelle und des Index), das Sperren ist langsam und die Sperrgranularität ist am geringsten, und die Wahrscheinlichkeit eines Sperrkonflikts ist gering am niedrigsten und die Parallelität ist hoch

    InnoDB-Speicher Die Engine unterstützt die Transaktionsverarbeitung, die Tabelle unterstützt Sperren auf Zeilenebene und die Parallelitätsfähigkeit ist besser

    So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

    InnoDB-Zeilensperre wird durch Sperren der Indexelemente erreicht Der Index, anstatt die Zeilendatensätze der Tabelle zu sperren. Dies bedeutet, dass InnoDB nur Sperren auf Zeilenebene verwendet, wenn Daten über Indexbedingungen abgerufen werden. Andernfalls verwendet InnoDB Tabellensperren. Da die Zeilensperrimplementierung von InnoDB so ist Eine Sperre wird dem Indexfeld hinzugefügt, keine Sperre des Zeilendatensatzes. Obwohl auf verschiedene Zeilen der Tabelle unter der InnoDB-Engine zugegriffen wird, tritt daher dennoch ein Sperrenkonflikt auf, wenn dasselbe Indexfeld als Filterbedingung verwendet wird. Dies kann nur seriell und nicht gleichzeitig erfolgen

    1. Auch wenn ein Index in SQL verwendet wird, wird der MySQL-Optimierer jedoch aufgeben, wenn davon ausgegangen wird, dass ein vollständiger Tabellenscan effizienter ist als die Verwendung eines Index Verwenden Sie zu diesem Zeitpunkt den Index, sodass keine Zeilensperren, sondern Tabellensperren verwendet werden. Beispielsweise verwendet MySQL für einige kleine Tabellen keine Indizes. 3. Exklusive Sperren (Exklusiv) und gemeinsam genutzt Sperren (gemeinsam genutzt)

    2. Exklusive Sperren, auch bekannt als Schreiben (SX, SX) und Schreiben und Schreiben (XX) schließen sich gegenseitig aus
    3. Paar Es besteht die folgende Beziehung zwischen Transaktionen, die X- und S-Sperren hinzufügen:

    4. Eine Transaktion fügt dem Datenobjekt A eine S-Sperre hinzu. Sie kann Lesevorgänge ausführen Während des Sperrzeitraums können andere Transaktionen S-Sperren zu A hinzufügen, aber keine X-Sperren hinzufügen. Eine Transaktion fügt eine :select …-Sperre im Freigabemodus hinzu, um eine gemeinsame Sperre zu erzwingen Erwerb, wählen Sie … für die Aktualisierung aus, um die exklusive Sperre zu erwerben1. Testen Sie die Kompatibilität von exklusiven Sperren und gemeinsam genutzten Sperren zwischen verschiedenen Transaktionen.
      Überprüfen Sie zunächst die SQL-Anweisung und den Inhalt der Tabelle. Sehen Sie sich die Isolationsstufe an:

    Öffnen Sie zuerst eine Transaktion und fügen Sie den Daten eine exklusive Sperre mit der ID = 7 hinzu.

    • Öffnen Sie dann die Transaktion mit einem anderen Client.
    • Wir verwenden den Service-Thread einer anderen Transaktion, der eine exklusive Sperre hinzugefügt hat auf die Daten mit der ID=7, was sie blockierte

    Wir haben versucht, den Daten mit der ID=7 eine gemeinsame Sperre hinzuzufügen, aber sie blockierte immer noch
    • Zusammenfassung: Zwischen verschiedenen Transaktionen Für Datensperren können nur SS-Sperren koexistieren. XX, SX und

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Verwenden Sie das nicht indizierte Feld der Tabelle als Filterbedingung

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Transaktion 2 möchte nun auch die exklusive Sperre dieses Datensatzes erhalten, schlägt jedoch vorhersehbar fehl; dann erhält Transaktion 2 nun Chenweis Datensatz „Exklusiv“. Versuchen Sie zu sehen, ob die Sperre erfolgreich sein kann. InnoDB unterstützt Zeilensperren. Wenn die Primärschlüssel-ID gerade als Filterbedingung verwendet wurde, können Transaktion 1 und Transaktion 2 erfolgreich Sperren für verschiedene Zeilen erwerben. Jetzt stellen wir jedoch fest, dass wir die exklusive Sperre namens Chenwei nicht erhalten können. Lassen Sie uns erklären:

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame SperrenDie Zeilensperre von InnoDB wird durch das Sperren von Indexelementen und nicht durch das Sperren von Tabellenzeilendatensätzen implementiert.

      Und wir verwenden den Namen als Filterbedingung, ohne den Index zu verwenden, daher werden natürlich keine Zeilensperren verwendet, Tabellensperren jedoch schon gebraucht. Dies bedeutet, dass InnoDB beim Abrufen von Daten über Indizes nur Sperren auf Zeilenebene verwendet, andernfalls verwendet InnoDB Tabellensperren!!! Das Namensfeld Nach dem Hinzufügen des Index können die beiden Transaktionen exklusive Sperren (zur Aktualisierung) für verschiedene Zeilen erhalten, was erneut beweist, dass die Zeilensperre von InnoDB zum Indexelement hinzugefügt wurde

      denn jetzt befindet sich der Name im Index Durch Zhangsan wurde festgestellt, dass die ID des Zeilendatensatzes, der sich im Hilfsindexbaum befand, 7 war, und dann ging ich zum Primärschlüsselindexbaum, um die exklusive Sperre des entsprechenden Zeilendatensatzes zu erhalten

      (Meine persönliche Vermutung ist, dass die entsprechende Datensätze im Hilfsindexbaum und im Primärschlüsselindexbaum wurden hinzugefügt (Sperre)

      4. Serialisierungsisolationsstufentest

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren (Alle Transaktionen verwenden exklusive Sperren oder gemeinsame Sperren, es ist kein Benutzer erforderlich, Sperren manuell hinzuzufügen)

      Setzen Sie die SerialisierungsisolationsstufeSo verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Zwei Transaktionen können gleichzeitig gemeinsam genutzte Sperren erhalten (SS-Koexistenz)So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Lassen Sie nun Transaktion 2 Daten einfügen

      Zu diesem Zeitpunkt muss eine exklusive Sperre vorhanden sein Aufgrund des Einfügens hinzugefügt, aber da Transaktion 1 bereits eine gemeinsame Sperre für die gesamte Tabelle hinzugefügt hat, kann Transaktion 2 die Tabelle nicht mehr erfolgreich sperren (SX existiert nicht)

      RollbackSo verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Weil wir dem Namen einen Index hinzugefügt haben , die obige Auswahl entspricht dem Hinzufügen einer gemeinsamen Zeilensperre zu den Daten mit dem Namen zhangsanSo verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren

      Aktualisierung von Transaktion 2


      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame SperrenTransaktion 2 kann nicht aktualisiert werden, da die gesamte Tabelle durch die gemeinsame Sperre von Transaktion 1 gesperrt wurde

      Transaktion 2 sieht aus Findet für Zhangsan im Hilfsindexbaum den entsprechenden Primärschlüsselwert und geht dann weiter. Der Primärschlüsselindexbaum hat den entsprechenden Datensatz gefunden, aber festgestellt, dass diese Datensatzzeile durch eine gemeinsame Sperre gesperrt wurde. Transaktion 2 kann die gemeinsame Sperre erhalten , kann aber die exklusive Sperre nicht erhalten

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren Versuchen wir zu sehen, ob es mit der Primärschlüsselindex-ID aktualisiert werden kann

      Das Feld dahinter, in dem wir jetzt die ID anstelle des Namens verwenden, ist immer noch blockiert Findet auch den entsprechenden Primärschlüssel über den Hilfsindexbaum und findet dann den entsprechenden Datensatz im Primärschlüsselindexbaum (Indexbaum und Primärschlüsselindexbaum sind gesperrt)

      So verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren Wir haben die Daten mit der ID=8 aktualisiert und es war erfolgreich. Den Zeilendaten mit der ID 7 werden nur Zeilensperren hinzugefügt, sodass wir die Daten mit der ID 8 erfolgreich verarbeiten können.

      Wenn ein Index vorhanden ist, verwenden Sie Zeilensperren. Wenn kein Index vorhanden ist, verwenden Sie Tabellensperren.

      Sperren auf Tabellenebene oder Sperren auf Zeilenebene beziehen sich auf die Granularität der Sperre, und exklusive Sperren beziehen sich auf die Art der Sperre. Es gibt einen Unterschied Gemeinsame Schlösser und exklusive Schlösser#🎜🎜 #

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie MySQL-Tabellensperren, Zeilensperren, exklusive Sperren und gemeinsame Sperren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    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

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Heiße Themen

    Java-Tutorial
    1664
    14
    PHP-Tutorial
    1267
    29
    C#-Tutorial
    1239
    24
    MySQLs Rolle: Datenbanken in Webanwendungen MySQLs Rolle: Datenbanken in Webanwendungen Apr 17, 2025 am 12:23 AM

    Die Hauptaufgabe von MySQL in Webanwendungen besteht darin, Daten zu speichern und zu verwalten. 1.Mysql verarbeitet effizient Benutzerinformationen, Produktkataloge, Transaktionsunterlagen und andere Daten. 2. Durch die SQL -Abfrage können Entwickler Informationen aus der Datenbank extrahieren, um dynamische Inhalte zu generieren. 3.Mysql arbeitet basierend auf dem Client-Server-Modell, um eine akzeptable Abfragegeschwindigkeit sicherzustellen.

    Beispiel für Laravel -Einführung Beispiel für Laravel -Einführung Apr 18, 2025 pm 12:45 PM

    Laravel ist ein PHP -Framework zum einfachen Aufbau von Webanwendungen. Es bietet eine Reihe leistungsstarker Funktionen, darunter: Installation: Installieren Sie die Laravel CLI weltweit mit Komponisten und erstellen Sie Anwendungen im Projektverzeichnis. Routing: Definieren Sie die Beziehung zwischen der URL und dem Handler in Routen/Web.php. Ansicht: Erstellen Sie eine Ansicht in Ressourcen/Ansichten, um die Benutzeroberfläche der Anwendung zu rendern. Datenbankintegration: Bietet eine Out-of-the-Box-Integration in Datenbanken wie MySQL und verwendet Migration, um Tabellen zu erstellen und zu ändern. Modell und Controller: Das Modell repräsentiert die Datenbankentität und die Controller -Prozesse HTTP -Anforderungen.

    MySQL und PhpMyAdmin: Kernfunktionen und Funktionen MySQL und PhpMyAdmin: Kernfunktionen und Funktionen Apr 22, 2025 am 12:12 AM

    MySQL und PhpMyAdmin sind leistungsstarke Datenbankverwaltungs -Tools. 1) MySQL wird verwendet, um Datenbanken und Tabellen zu erstellen und DML- und SQL -Abfragen auszuführen. 2) PHPMYADMIN bietet eine intuitive Schnittstelle für Datenbankverwaltung, Tabellenstrukturverwaltung, Datenoperationen und Benutzerberechtigungsverwaltung.

    MySQL gegen andere Programmiersprachen: Ein Vergleich MySQL gegen andere Programmiersprachen: Ein Vergleich Apr 19, 2025 am 12:22 AM

    Im Vergleich zu anderen Programmiersprachen wird MySQL hauptsächlich zum Speichern und Verwalten von Daten verwendet, während andere Sprachen wie Python, Java und C für die logische Verarbeitung und Anwendungsentwicklung verwendet werden. MySQL ist bekannt für seine hohe Leistung, Skalierbarkeit und plattformübergreifende Unterstützung, die für Datenverwaltungsanforderungen geeignet sind, während andere Sprachen in ihren jeweiligen Bereichen wie Datenanalysen, Unternehmensanwendungen und Systemprogramme Vorteile haben.

    Lösen Sie das Datenbankverbindungsproblem: Ein praktischer Fall der Verwendung von Minii/DB -Bibliothek Lösen Sie das Datenbankverbindungsproblem: Ein praktischer Fall der Verwendung von Minii/DB -Bibliothek Apr 18, 2025 am 07:09 AM

    Bei der Entwicklung einer kleinen Anwendung stieß ich auf ein kniffliges Problem: die Notwendigkeit, eine leichte Datenbankbetriebsbibliothek schnell zu integrieren. Nachdem ich mehrere Bibliotheken ausprobiert hatte, stellte ich fest, dass sie entweder zu viel Funktionalität haben oder nicht sehr kompatibel sind. Schließlich fand ich Minii/DB, eine vereinfachte Version basierend auf YII2, die mein Problem perfekt löste.

    Laravel Framework Installationsmethode Laravel Framework Installationsmethode Apr 18, 2025 pm 12:54 PM

    Artikelzusammenfassung: Dieser Artikel enthält detaillierte Schritt-für-Schritt-Anweisungen, um die Leser zu leiten, wie das Laravel-Framework einfach installiert werden kann. Laravel ist ein leistungsstarkes PHP -Framework, das den Entwicklungsprozess von Webanwendungen beschleunigt. Dieses Tutorial deckt den Installationsprozess von den Systemanforderungen bis zur Konfiguration von Datenbanken und das Einrichten von Routing ab. Durch die Ausführung dieser Schritte können die Leser schnell und effizient eine solide Grundlage für ihr Laravel -Projekt legen.

    MySQL für Anfänger: Erste Schritte mit der Datenbankverwaltung MySQL für Anfänger: Erste Schritte mit der Datenbankverwaltung Apr 18, 2025 am 12:10 AM

    Zu den grundlegenden Operationen von MySQL gehört das Erstellen von Datenbanken, Tabellen und die Verwendung von SQL zur Durchführung von CRUD -Operationen für Daten. 1. Erstellen Sie eine Datenbank: createdatabasemy_first_db; 2. Erstellen Sie eine Tabelle: CreateTableBooks (IDINGAUTO_INCRECTIONPRIMARYKEY, Titelvarchar (100) Notnull, AuthorVarchar (100) Notnull, veröffentlicht_yearint); 3.. Daten einfügen: InsertIntoBooks (Titel, Autor, veröffentlicht_year) va

    Lösen Lösen Apr 18, 2025 am 08:42 AM

    Bei der Entwicklung einer E-Commerce-Website mit Thelia habe ich auf ein kniffliges Problem gestoßen: Der MySQL-Modus ist nicht ordnungsgemäß eingestellt, wodurch einige Funktionen nicht ordnungsgemäß funktionieren. Nach einigen Erkundungen fand ich ein Modul namens TheliamysqlModeSCecker, das das von Thelia erforderliche MySQL -Muster automatisch beheben kann und meine Probleme vollständig lösen kann.

    See all articles