Bestimmen Sie anhand von Beispielen, ob das MySQL-Update die Tabelle sperrt

Bestimmen Sie anhand von Beispielen, ob das MySQL-Update die Tabelle sperrt

Zwei Fälle:

1. Mit Index 2. Ohne Index

Voraussetzungen:

Methode: Verwenden Sie die Befehlszeile zur Simulation

1. Da MySQL Transaktionen standardmäßig automatisch festschreibt, müssen Sie zunächst prüfen, ob Ihre aktuelle Datenbank Transaktionen automatisch festgeschrieben hat.

Befehl: select @@autocommit;

Die Ergebnisse sind wie folgt:

+————–+
| @@autocommit |
+————–+
| 0 |
+————–+

Wenn der Wert 1 ist, führen Sie den Befehl aus: set autocommit = 0; set, um automatisches Commit zu deaktivieren

2. Das aktuelle Datenbanktabellenformat ist wie folgt

tb_user | TABELLE ERSTELLEN tb_user (
id bigint(20) NICHT NULL AUTO_INCREMENT,
Name varchar(32) DEFAULT NULL,
Telefon varchar (11) DEFAULT NULL,
Operator varchar(32) DEFAULT NULL,
gmt_create Datum/Uhrzeit DEFAULT NULL,
gmt_modified Datum/Uhrzeit DEFAULT NULL,
PRIMÄRSCHLÜSSEL (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

Offensichtlich habe ich außer dem Primärschlüssel keine Indizes hinzugefügt.

Praxisbeispiel:

1. Kein Index

Führen Sie den Befehl „begin“ aus, um die Transaktion zu starten, und führen Sie dann den Befehl „update tb_user set phone=11 where name=”c1”“ aus, um die Änderungen vorzunehmen. Bestätigen Sie die Transaktion noch nicht.

Öffnen Sie ein weiteres Fenster und führen Sie den Befehl direkt aus: update tb_user set phone=22 where name=”c2”; Sie werden feststellen, dass der Befehl hängen bleibt. Wenn die vorherige Transaktion jedoch per Commit übermittelt wird, wird der Befehl normal ausgeführt und beendet, was darauf hinweist, dass die Tabelle gesperrt ist.

2. Fügen Sie dem Namensfeld einen Index hinzu

Erstellen Sie den Index Index_Name für tb_user(Name);

Setzen Sie dann den Vorgang wie in Schritt 1 fort, d. h. öffnen Sie eine Transaktion und führen Sie update tb_user set phone=11 where name=”c1” aus; führen Sie noch kein Commit durch

Führen Sie dann einen weiteren Befehl aus: update tb_user set phone=22 where name=”c2”; und Sie werden feststellen, dass der Befehl nicht hängen bleibt, was darauf hinweist, dass die Tabelle nicht gesperrt ist.

Wenn jedoch ein weiteres Update „tb_user set phone=22 where name=”c1”;“ dieselbe Zeile aktualisiert, bedeutet dies, dass die Zeile gesperrt ist.

3. Zusammenfassung

Wenn kein Index vorhanden ist, wird die Tabelle durch das Update gesperrt. Wenn ein Index hinzugefügt wird, wird die Zeile gesperrt.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Wird die Tabelle durch ein Update in einer MySQL-Transaktion gesperrt?
  • Analyse des Sperrmechanismus der MySQL-Datenbank
  • Detaillierte Erläuterung der MySQL-Deadlock-Prüfung und Beispiele zur Deadlock-Entfernung
  • Die normale Methode der MySQL-Deadlock-Prüfungsverarbeitung
  • So fragen Sie ab, ob die MySQL-Tabelle gesperrt ist
  • Pessimistisches Sperren und optimistisches Sperren in MySQL
  • Detaillierte Erklärung der Bedeutung und des Unterschieds zwischen MySQL-Zeilensperren und Tabellensperren
  • Verständnis und Anwendungsanalyse der pessimistischen und optimistischen Sperre von MySQL
  • MySQL 8.0.19 unterstützt die Sperrung eines Kontos nach dreimaliger Eingabe eines falschen Passworts (Beispiel)
  • Zusammenfassung des Wissens zu MySQL-Sperren

<<:  Vue3.0 implementiert die Kapselung des Dropdown-Menüs

>>:  Idea konfiguriert Tomcat zum Starten eines Webprojekts - Grafik-Tutorial

Artikel empfehlen

Reines CSS3 zur Erzielung einer Mouseover-Schaltflächenanimation, Teil 2

Haben Sie nach den letzten beiden Kapiteln ein ne...

GZIP-Komprimierung Tomcat und Prozessdiagramm zur Verbesserung der Web-Leistung

1. Einleitung Ich habe vor Kurzem an einem Projek...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...

Beispiele für die Verwendung des ES6-Spread-Operators

Inhaltsverzeichnis Was sind Spread- und Rest-Oper...

Implementierung des WeChat-Applet-Nachrichten-Pushs in Nodejs

Auswählen oder Erstellen einer Abonnementnachrich...

Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor

In diesem Artikel wird die Zusammensetzung der Ha...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.11 Zip

1. Laden Sie das MySQL 5.7.11 Zip-Installationspa...