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.
Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.
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:
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 IndexFü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 hinzucreate 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!