MySQL-Prinzip der Zeilensperrenimplementierung: 1. Die Zeilensperre von InnoDB wird durch Sperren von Indexelementen implementiert. Dies ist der Unterschied zwischen MySQL und Oracle ist anders; 2. InnoDB bestimmt, dass Sperren auf Zeilenebene nur zum Abrufen von Daten über Indexbedingungen verwendet werden können. Verwenden Sie Sperren auf Tabellenebene direkt.
MySQL-Sperren auf Zeilenebene:
Sperre ist ein Synchronisationsmechanismus, der verwendet wird, um den Ressourcenzugriff beim Ausführen von Multithreads zwangsweise einzuschränken. Datenbanksperren können je nach Granularität in Sperren auf Zeilenebene unterteilt werden das Schloss. Sperren auf Tabellenebene und Sperren auf Seitenebene
Sperren auf Zeilenebene
Sperren auf Zeilenebene sind der detaillierteste Sperrmechanismus in MySQL. Dies bedeutet, dass nur die aktuell bearbeitete Zeile gesperrt ist und es zu Sperrkonflikten auf Zeilenebene kommt Die Wahrscheinlichkeit ist sehr gering, die Granularität ist am geringsten, aber die Sperrkosten sind am höchsten. Sperren auf Zeilenebene werden in gemeinsame Sperren und exklusive Sperren unterteilt.
Eigenschaften:
Hoher Overhead, langsame Sperren und Deadlocks können auftreten; die Sperrgranularität ist minimal, Sperrkonflikte treten am wahrscheinlichsten auf und die Parallelität ist hoch;
InnoDB-Zeilensperre ist Dies wird durch das Sperren der Indexelemente erreicht. Dies unterscheidet sich von MySQL und Oracle. Letzteres erfolgt durch das Sperren der Indexelemente in der Datenbank. Dies wird durch das Sperren der entsprechenden Datenzeilen erreicht. Die Sperre auf Zeilenebene von InnoDB bestimmt, dass Zeilen nur zum Abrufen von Daten über Indexbedingungen verwendet werden können. Ebenensperre, andernfalls verwenden Sie die Sperre auf Tabellenebene direkt.
Besondere Aufmerksamkeit: Wenn Sie Sperren auf Zeilenebene verwenden, müssen Sie einen Index verwenden. Zum Beispiel:
Erstellen Sie eine Tabellenstruktur Öffnen Sie drei Befehlszeilenfenster. Testen Sie es
Befehlszeilenfenster 1 | Befehlszeilenfenster 2 | Befehlszeilenfenster 3 |
mysql> set autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> select * from Developerinfo where userid = '1' for aktualisieren; +-------- +--------+----------+ |name | +--------+------ -- +---------+ | 123456 | +-------- +--------+----------+ 1 Zeile im Satz |
mysql> set autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> select * from Developerinfo where userid = '1' for Update; Warten |
mysql> set autocommit = 0; Abfrage OK, 0 Zeilen Betroffen mysql> wählen Sie * aus der Entwicklerinfo aus, wobei die Benutzer-ID = '3' ist update; +--------+---------+ | passWort |. +------+---------+ | 3 |. +------+----------+ 1 Zeile im Satz |
Abfrage OK,
0 Zeilen betroffen | mysql>
Developerinfo, wobei Benutzer-ID = '1' für Update;
+--------+--------
+---------+ |. Benutzername | +-------- +---------+ | 123456 | +-------- +--------+----------+ 1 Zeile im Satz |
Öffnen Sie zwei Befehlszeilenfenster zum Testen
Befehlszeilenfenster 2 | ||||||||||
mysql>
Wählen Sie * aus der Entwicklerinfo aus, wobei Name = 'liujie' für die Aktualisierung ist; +-------- +--------+---------+ |. passwort |. +---------+ |. 123456 | +-------- +--------+----------+ 1 Zeile im Satz MySQL> autocommit=0; |
Abfrage OK, 0 Zeilen betroffen mysql> where name = 'tong' for update; Wait | mysql>
update;|||||||||
| 123456 | +--------+ ----------+ | 1 Reihe im Satz
(3) Fragen Sie nicht eindeutige Indexfelder ab, um die Datenbank abzufragen. Die Zeilensperren von MySQL sind falsche Sperren für Indizes, nicht für Datensätze. Daher kann es vorkommen, dass unterschiedliche Datensätze gesperrt werden Öffnen Sie drei. Verwenden Sie zwei Befehlszeilenfenster zum Testen.
|
Das obige ist der detaillierte Inhalt vonWas ist das Implementierungsprinzip der MySQL-Sperre auf Zeilenebene?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!