Wird die Tabelle durch ein Update in einer MySQL-Transaktion gesperrt?

Wird die Tabelle durch ein Update in einer MySQL-Transaktion gesperrt?

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 | ERSTELLE TABELLE `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 aus

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.

Dies ist das Ende dieses Artikels darüber, ob Updates in MySQL-Transaktionen die Tabelle sperren. Weitere Informationen zum Sperren der Tabelle durch MySQL-Transaktionsupdates finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Nicht standardmäßiger Implementierungscode für die MySQL UPDATE-Anweisung
  • MySQL-Update-Fall Update-Feldwert ist keine feste Operation
  • Beim Ändern eines Datensatzes in MySQL lautet die Aktualisierungsoperation Feld = Feld + Zeichenfolge
  • MySQL-Beispiel-Tutorial: Ergebnisse auswählen, um ein Update durchzuführen
  • Detaillierte Analyse der Syntax von Mysql-Updates zum Ändern mehrerer Felder und
  • Notieren Sie eine Falle bei der Aktualisierung der MySQL-Update-Anweisung
  • Detailliertes Beispiel für MySQL-Joint-Tabellen-Update-Daten
  • Detaillierte Erläuterung des Ausführungsprozesses der MySQL-Update-Anweisung
  • Zusammenfassung der gemeinsamen Updatemethode für MySQL-Updates mehrerer Tabellen
  • Unterschied zwischen MySQL-Update-Set und und

<<:  HTML-Auszeichnungssprache - Tabellen-Tag

>>:  JS+Canvas zeichnet ein Glücksrad

Artikel empfehlen

Zwei Möglichkeiten zum Löschen von Tabellendaten in MySQL und ihre Unterschiede

Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...

Grafisches Tutorial zur Installation von MySQL 5.5.27

1. Installation von MySQL 1. Öffnen Sie die herun...

Lösung für das Problem, dass sich der mysql8.0.11-Client nicht anmelden kann

In diesem Artikel erfahren Sie, wie Sie das Probl...

Navicat für MySql Visueller Import von CSV-Dateien

In diesem Artikel wird der spezifische Code von N...

Einfache Implementierung von Vue Drag & Drop

In diesem Artikel wird hauptsächlich die einfache...

Detaillierte Erklärung der verfügbaren Umgebungsvariablen in Docker Compose

Mehrere Teile von Compose befassen sich in irgend...

Einführung in die Installation des Vim-Plugins unter Linux

Inhaltsverzeichnis Installieren Sie den Vim-Plugi...

Verwenden Sie JS, um Dateien zu bearbeiten (FileReader liest --node's fs)

Inhaltsverzeichnis JS liest Datei FileReader doku...

Vue3-Kompilierungsprozess - Quellcodeanalyse

Vorwort: Vue3 ist schon seit langem verfügbar. Vo...