Vorwort Sperren sind Synchronisierungsmechanismen, mit denen der Ressourcenzugriff bei der Ausführung mehrerer Threads zwangsweise eingeschränkt wird. Datenbanksperren können je nach Granularität der Sperren in Sperren auf Zeilenebene, Sperren auf Tabellenebene und Sperren auf Seitenebene unterteilt werden. Sperren auf Zeilenebene Zeilensperren sind der feinkörnigste Sperrmechanismus in MySQL. Dies bedeutet, dass nur die aktuell bearbeitete Zeile gesperrt wird. Die Wahrscheinlichkeit von Sperrkonflikten auf Zeilenebene ist sehr gering und ihre Granularität ist am geringsten, aber die Kosten für die Sperrung sind am höchsten. Zeilensperren werden in gemeinsam genutzte Sperren und exklusive Sperren unterteilt. Merkmale: Der Overhead ist hoch, die Sperren sind langsam und es können Deadlocks auftreten; die Sperrgranularität ist gering, die Wahrscheinlichkeit eines Sperrkonflikts ist am höchsten und die Parallelität ist ebenfalls hoch; Umsetzungsprinzip: InnoDB-Zeilensperren werden durch Sperren von Indexelementen implementiert, was sich von MySQL und Oracle unterscheidet. Letzteres wird durch Sperren der entsprechenden Datenzeilen in der Datenbank implementiert. Die Zeilensperren von InnoDB bestimmen, dass Zeilensperren nur zum Abrufen von Daten über Indexbedingungen verwendet werden können. Andernfalls werden Sperren auf Tabellenebene direkt verwendet. Besonderer Hinweis: Wenn Sie Sperren auf Zeilenebene verwenden, müssen Sie Indizes verwenden Zum Beispiel: Tabellenstruktur erstellen CREATE TABLE `developerinfo` ( `userID` bigint(20) NICHT NULL, `name` varchar(255) DEFAULT NULL, `passWord` varchar(255) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`Benutzer-ID`), SCHLÜSSEL `PASSWORD_INDEX` (`passWord`) MIT BTREE )ENGINE=InnoDB STANDARD-CHARSET=utf8; Einfügen von Daten INSERT INTO `developerinfo` VALUES ('1', 'liujie', '123456'); INSERT INTO `developerinfo` VALUES ('2', 'yitong', '123'); INSERT INTO `developerinfo` VALUES ('3', 'tong', '123456'); (1) Abfragen der Datenbank mit dem Primärschlüsselindex und Verwendung von Zeilensperren Öffnen Sie zum Testen drei Befehlszeilenfenster
mysql> setze Autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> wähle * aus Entwicklerinfo, wobei Benutzer-ID = „1“ für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ 1 Reihe im Set |mysql> setze Autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> wähle * aus Entwicklerinfo, wobei Benutzer-ID = „1“ für Update; warte|mysql> setze Autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> wähle * aus Entwicklerinfo, wobei Benutzer-ID = „3“ für Update ist; +--------+------+----------+ | Benutzer-ID | Name | Passwort | +--------+------+----------+ | 3 | Zange | 123456 | +--------+------+----------+ 1 Reihe im Set |mysql> festschreiben; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where userid = '1' für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ 1 Reihe im Set (2) Abfragen nicht indizierter Felder zur Abfrage der Datenbank mithilfe von Zeilensperren Öffnen Sie zum Testen zwei Befehlszeilenfenster
|mysql> setze autocommit=0; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where name = 'liujie' für Update; +--------+--------+----------+ Benutzer-ID Name Passwort +--------+--------+----------+ 1. Liujie 123456 +--------+--------+----------+ 1 Zeile im Satz |mysql> set autocommit=0; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where name = 'tong' für Update; Warten| mysql> festschreiben; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where name = 'liujie' für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ 1 Reihe im Set
mysql> setze Autocommit=0; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where password = '123456 ' für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 1 | liujie | 123456 | | 3 | Zange | 123456 | +--------+--------+----------+ 2 Zeilen im Satz MySQL> Set Autocommit =0; Abfrage OK, 0 Zeilen betroffen mysql> wähle * aus Entwicklerinfo, wobei Benutzer-ID = „1“ für Update;
mysql> setze Autocommit = 0; Abfrage OK, 0 Zeilen betroffen mysql> select * from developerinfo where userid = '2 ' für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 2 | 123 | +--------+--------+----------+ 1 Reihe im Set Commit; mysql> Auswahl * aus Entwicklerinfo, wobei Benutzer-ID = „1“ für Update; +--------+--------+----------+ | Benutzer-ID | Name | Passwort | +--------+--------+----------+ | 1 | liujie | 123456 | +--------+--------+----------+ 1 Reihe im Set
Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Best Practices für die Entwicklung von Amap-Anwendungen mit Vue
Inhaltsverzeichnis Vorwort 1. Der Prozess der Ver...
Inhaltsverzeichnis 1. Vorbereitung vor der Entwic...
Zwei Implementierungen der Vue-Dropdown-Liste Die...
Wenn die Tabelle breit ist, kann es zu einem Über...
Inhaltsverzeichnis Vorwort Axios-Installation und...
Vorne geschrieben Es gibt zwei Möglichkeiten, MyS...
<br />Grün liegt zwischen Gelb und Blau (kal...
Erhalten Sie tägliche Statistiken Wenn Sie ein Pr...
Inhaltsverzeichnis 1. Bootstrap5-Haltepunkte 1.1 ...
Inhaltsverzeichnis Überblick Eigenschafteneinstel...
1. Ergebnisse erzielen 2. Vom Backend zurückgegeb...
Um mehrere Datenbanken zu sichern, können Sie den...
VMware vSphere ist die branchenführende und zuver...
Aktuell besteht die Anforderung, dass beim Klicke...
Von NFS bereitgestellte Dienste Mounten: Aktivier...