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

Detailliertes Tutorial zur Installation von phpMyAdmin unter Ubuntu 18.04

Wir werden phpMyAdmin installieren, damit es mit ...

CentOS7 64-Bit-Installation MySQL Grafik-Tutorial

Voraussetzungen für die Installation von MySQL: I...

So konfigurieren Sie den Nginx-Lastausgleich

Inhaltsverzeichnis Nginx-Lastausgleichskonfigurat...

border-radius-Methode zum Hinzufügen abgerundeter Ränder zu Elementen

border-radius:10px; /* Alle Ecken sind mit einem ...

So erstellen Sie eine Vue3-Desktopanwendung

In diesem Artikel sehen wir uns an, wie man mit V...

Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren

Sicht Was ist eine Ansicht? Welche Rolle spielt e...

js zum Implementieren von Operationen zum Hinzufügen und Löschen von Tabellen

In diesem Artikelbeispiel wird der spezifische JS...

MySQL 8.0.20 Installations-Tutorial mit Bildern und Text (Windows 64-Bit)

1: Download von der offiziellen MySQL-Website htt...

3 Möglichkeiten zum Hinzufügen von Links zu HTML-Auswahl-Tags

Der Erste : Code kopieren Der Code lautet wie folg...

Detaillierte Erläuterung des Docker-Arbeitsmodus und -Prinzips

Wie in der folgenden Abbildung dargestellt: Wenn ...

VScode Remote SSH-Remote-Bearbeitung und -Debugging von Code

Die neueste Insider-Version von Visual Studio Cod...

Erklärung zur Änderung des npm Taobao-Spiegels

1. Nutzung auf höchster Ebene 1. Installieren Sie...