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

Beispielanalyse für MySQL-Transaktionen, Isolationsebenen und Sperrenverwendung

Dieser Artikel beschreibt anhand von Beispielen M...

Reiner CSS-Code zum Erzielen von Fluss und dynamischen Linieneffekten

Ideen: Eine äußere Box legt den Hintergrund fest;...

Einführung in die CSS-Stilklassifizierung (Grundkenntnisse)

Klassifizierung von CSS-Stilen 1. Interner Stil -...

Führen Sie die Schritte zur Installation von MySQL 5.5 auf CentOS aus

Inhaltsverzeichnis 1. Vorbereitung vor der Instal...

Detaillierte Erklärung der MySQL-Partitionstabelle

Vorwort: Partitionierung ist ein Tabellenentwurfs...

Beschreiben Sie kurz den Unterschied zwischen Redis und MySQL

Wir wissen, dass MySQL ein persistenter Speicher ...

Analyse von MySQL-Lock-Wait- und Deadlock-Problemen

Inhaltsverzeichnis Vorwort: 1. Verstehen Sie Lock...

So implementieren Sie eine Remote-Verbindung für Redis unter Linux

Nachdem Sie Redis unter Linux installiert haben, ...

Beispielcode zur Implementierung einer schwebenden Seitenbox basierend auf JS

Wenn die Bildlaufleiste nach unten gezogen wird, ...

Vue implementiert rekursiv ein dreistufiges Menü

In diesem Artikelbeispiel wird der spezifische Co...

So erklären Sie TypeScript-Generika auf einfache Weise

Inhaltsverzeichnis Überblick Was sind Generika Sy...

So erstellen Sie schnell eine statische Website in der Alibaba Cloud

Vorwort: Als Junior-Programmierer träume ich davo...

Reagieren Sie auf die Konstruktionsreihenfolge verschachtelter Komponenten

Inhaltsverzeichnis Auf der offiziellen React-Webs...