Heim  >  Artikel  >  Datenbank  >  Wird ein Update in MySQL die Tabelle sperren?

Wird ein Update in MySQL die Tabelle sperren?

WBOY
WBOYOriginal
2022-05-26 14:42:368531Durchsuche

Es gibt zwei Situationen, in denen das Update in MySQL die Tabelle sperrt: 1. Wenn das Update keinen Index hat, wird die vorherige Transaktion in der Anweisung per Commit übermittelt und der Befehl wird normal ausgeführt und beendet, dann wird das Update gesperrt 2. Wenn update einen Index hinzufügt, bleibt der Befehl nicht hängen und sperrt die Tabelle nicht, sondern aktualisiert dieselbe Zeile und verursacht eine Zeilensperre.

Wird ein Update in MySQL die Tabelle sperren?

Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.

Wird die Tabelle durch die Aktualisierung gesperrt?

Wenn kein Index vorhanden ist, wird die Zeile durch die Aktualisierung gesperrt.

Wenn die vorherige Transaktion per Commit übermittelt wird läuft normal und endet. Die Erklärung ist: Die Uhr ist gesperrt.

Zwei Situationen:

  • 1. Mit Index

  • 2. Ohne Index

Voraussetzung:

Methode: Verwenden Sie die Befehlszeile zum Simulieren

1.mysq ist standardmäßig aktiviert Daher müssen Sie zunächst prüfen, ob in Ihrer aktuellen Datenbank die automatische Transaktionsfestschreibung aktiviert ist.

Befehl: select @@autocommit;

Das Ergebnis ist wie folgt:

Wird ein Update in MySQL die Tabelle sperren?

Wenn es 1 ist, führen Sie den Befehl aus: set autocommit = 0; set to not turn on the current Das Datenbanktabellenformat ist wie folgt:

tb_user | CREATE TABLE `tb_user` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) DEFAULT NULL,
 `phone` varchar(11) DEFAULT NULL,
 `operator` varchar(32) DEFAULT NULL,
 `gmt_create` datetime DEFAULT NULL,
 `gmt_modified` datetime DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

Offensichtlich habe ich keinen Index außer dem Primärschlüssel hinzugefügt

Eigentliches Beispiel:

1. Kein Index

Führen Sie den Befehl aus: begin; starten Sie die Transaktion und führen Sie dann den Befehl aus : update tb_user set phone=11 where name="c1"; Zum Ändern die Transaktion nicht zuerst festschreiben.

Öffnen Sie ein anderes 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, aber wenn die vorherige Transaktion per Commit übermittelt wird, wird der Befehl normal ausgeführt und beendet , was anzeigt, dass die Uhr gesperrt ist.

2. Fügen Sie einen Index zum Namensfeld hinzu

create index index_name on tb_user(name);
Fahren Sie dann mit dem Vorgang 1 fort, der darin besteht, eine Transaktion zu öffnen und update tb_user set phone=11 auszuführen, wobei name="c1" nicht zuerst übermittelt wird

und dann ein weiteres Update tb_user set phone=22 where name="c2"; und stellen Sie fest, dass der Befehl nicht hängen bleibt, was darauf hinweist, dass keine Sperrtabelle vorhanden ist

Aber wenn ein weiteres Update tb_user set phone=22 where name=" c1"; aktualisiert dieselbe Zeile, was bedeutet, dass keine Sperrtabelle vorhanden ist

Es handelt sich um eine Zeilensperre

3. Zusammenfassung

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

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWird ein Update in MySQL die Tabelle sperren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn