Übersicht über MySQL-Sperren
Im Vergleich zu anderen Datenbanken ist der Sperrmechanismus von MySQL relativ einfach und seine wichtigste Eigenschaft ist dass verschiedene Speicher-Engines unterschiedliche Sperrmechanismen unterstützen. Beispielsweise verwenden die Speicher-Engines MyISAM und MEMORY Sperren auf Tabellenebene. Die BDB-Speicher-Engine verwendet Sperren auf Seitenebene, unterstützt aber auch Sperren auf Tabellenebene. Die InnoDB-Speicher-Engine unterstützt sowohl das Sperren auf Zeilenebene als auch das Sperren auf Tabellenebene, standardmäßig wird jedoch das Sperren auf Zeilenebene verwendet.
Sperre auf Tabellenebene: Die Sperre auf Tabellenebene ist die Sperre mit der größten Granularität in MySQL, was bedeutet, dass die gesamte Tabelle des aktuellen Vorgangs gesperrt wird. Es hat einen geringen Overhead und schnelle Sperren; die Sperrgranularität ist groß, die Wahrscheinlichkeit eines Sperrkonflikts ist am höchsten und die Parallelität ist am niedrigsten.
Kostenloses Teilen von Lernvideo-Tutorials: MySQL-Video-Tutorial
Sperre auf Zeilenebene: Die Sperre auf Zeilenebene ist die detaillierteste Sperre in MySQL, was bedeutet, dass sie nur für Die aktuell bearbeitete Zeile ist gesperrt. Der Overhead ist hoch und das Sperren ist langsam; die Sperrgranularität ist am geringsten, die Wahrscheinlichkeit von Sperrkonflikten ist am niedrigsten und die Parallelität ist am höchsten.
Sperre auf Seitenebene: Die Sperre auf Seitenebene ist eine Sperre in MySQL, deren Sperrgranularität zwischen Sperren auf Zeilenebene und Sperren auf Tabellenebene liegt. Sperren auf Tabellenebene sind schnell, weisen jedoch viele Konflikte auf. Es gibt weniger Konflikte auf Zeilenebene, aber es ist langsamer. Daher wurde eine kompromittierte Seitenebene eingeführt, die jeweils eine Gruppe benachbarter Datensätze sperrt. BDB unterstützt Sperren auf Seitenebene. Der Overhead und die Sperrzeit liegen zwischen Tabellensperren und Zeilensperren. Die Sperrgranularität liegt zwischen Tabellensperren und Zeilensperren, und die Parallelität ist durchschnittlich.
Aus den oben genannten Eigenschaften lässt sich schließen, dass es schwierig ist, allgemein zu sagen, welches Schloss besser geeignet ist. Wir können nur anhand der Eigenschaften bestimmter Anwendungen sagen, welches Schloss besser geeignet ist! ! Nur aus Sperrsicht: Sperren auf Tabellenebene eignen sich besser für Anwendungen, die hauptsächlich auf Abfragen basieren und bei denen nur eine kleine Datenmenge basierend auf Indexbedingungen aktualisiert wird, wie z. B. Webanwendungen. Sperren auf Zeilenebene eignen sich besser für Anwendungen, bei denen eine große Anzahl verschiedener Daten gleichzeitig entsprechend den Indexbedingungen aktualisiert wird und gleichzeitig Abfragen erfolgen, wie z. B. einige OLTP-Systeme (Online Transaction Processing).
Beispiele
1. Wenn beim Kauf eines Produkts nur ein Produkt auf Lager ist und zwei Personen es gleichzeitig kaufen, wer kauft es? Problem.
2. Zuerst werden die Artikeldaten aus der Inventartabelle abgerufen und dann die Bestellinformationen eingegeben.
3. Aktualisieren Sie die Warenmenge. In diesem Prozess kann die Verwendung von Sperren begrenzte Ressourcen schützen und den Widerspruch zwischen Isolation und Parallelität lösen.
Klassifizierung von Sperren
Nach Vorgang:
Lesesperre (gemeinsame Sperre): Mehrere Lesevorgänge für dieselben Daten. Vorgänge können ausgeführt werden gleichzeitig, ohne sich gegenseitig zu beeinflussen.
Schreibsperre (exklusive Sperre): Bevor der aktuelle Schreibvorgang abgeschlossen ist, werden andere Schreibsperren und Lesesperren blockiert.
Je nach Granularität:
Tabellensperre, Zeilensperre, Seitensperre
Empfohlene Tutorials zu verwandten Artikeln: MySQL-Tutorial
Das obige ist der detaillierte Inhalt vonSo verstehen Sie den MySQL-Sperrmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!