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
Vor Kurzem habe ich mit shake.js eine ähnliche Fu...
Inhaltsverzeichnis 1. Ändern Sie die Datei my.cnf...
Übersicht über partitionierte MySQL-Tabellen Wir ...
Die Installation von MySQL 5.7 auf Ubuntu 1804 wi...
Siehe: https://www.jb51.net/article/112612.htm Üb...
Inhaltsverzeichnis Vorwort 1. for-Schleife 2. whi...
Verwenden Sie ein Profil, um langsames SQL zu ana...
Dieser Artikel veranschaulicht anhand von Beispie...
Methode 1: Befehlszeilenänderung Wir müssen nur d...
Müssen die Felder und Eigenschaften der Tabelle i...
1. Kurze Einführung in die Veranstaltung Ein Erei...
Ein Trick zum Umgang mit dieser Art von Fehlern be...
Inhaltsverzeichnis 1. Grundlegende Verwendung von...
Inhaltsverzeichnis 1. Kommentare zu MySQL-Primärs...