Im Vorstellungsgespräch wurde ich gefragt, ob select...for update die Tabelle oder die Zeile sperren würde.

Im Vorstellungsgespräch wurde ich gefragt, ob select...for update die Tabelle oder die Zeile sperren würde.

Die Select-Abfrageanweisung führt nicht zu einer Sperre, aber Select .......for Update führt zusätzlich zu seiner Abfragefunktion eine Sperre aus, und es handelt sich um eine pessimistische Sperre.

Ob eine Zeilensperre oder eine Tabellensperre hinzugefügt wird, hängt davon ab, ob der Index/Primärschlüssel verwendet wird.

Wenn kein Index/Primärschlüssel vorhanden ist, handelt es sich um eine Tabellensperre, andernfalls um eine Zeilensperre.

verifizieren:

Tabelle SQL erstellen

//id ist der Primärschlüssel //name ist der eindeutige Index CREATE TABLE `user` (
	`id` INT ( 11 ) NICHT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) DEFAULT NULL,
	`Alter` INT ( 11 ) DEFAULT NULL,
    `code` VARCHAR(255) DEFAULT NULL,
	PRIMÄRSCHLÜSSEL ( `id` ),
    SCHLÜSSEL `idx_age` ( `age` ) MIT BTREE 
) ENGINE = INNODB AUTO_INCREMENT = 1570068 STANDARD-CHARSET = utf8

Sie müssen die automatische Übermittlung deaktivieren und auf manuelle Übermittlung umstellen, indem Sie @@autocommit=0; festlegen. 0 steht für manuelle Übermittlung, 1 für automatische Übermittlung.

Kombiniert mit der Beispielüberprüfung

Beispiel 1:

Verwenden Sie die Primärschlüssel-ID als Abfragebedingung und starten Sie dann eine weitere Transaktion, um die Daten zu aktualisieren. Die Aktualisierung wird blockiert und gesperrt, wodurch die abzufragenden Zeilendaten mit der ID 1 gesperrt werden.

Abbildung 1 zeigt die erste Transaktion, und es wird keine Transaktion festgeschrieben

Abbildung 2 zeigt die zweite Transaktion, die beim Aktualisieren von Daten blockiert ist.

Abbildung 3 zeigt die zweite Transaktion, bei der ein Fehler auftritt, weil die Sperre längere Zeit nicht erhalten werden kann.

Beispiel 2:

Wir öffnen eine Transaktion, um weitere Daten mit der ID 2 zu aktualisieren.

Beispiel 3 (Index):

Als die Tabelle erstmals erstellt wurde, wurde ein eindeutiger Index für das Alter erstellt.

Beispiel 4:

Verwenden Sie gemeinsame Feldcodes für den Betrieb

In einer anderen Transaktion aktualisiere ich ein weiteres Datenelement. Wenn meine Aktualisierung erfolgreich ist, wird die Zeile gesperrt. Wenn sie fehlschlägt, wird die Tabelle gesperrt.

Ergebnis:

Wenn die Abfragebedingung einen Index oder Primärschlüssel verwendet, führt die Auswahl von ..... für die Aktualisierung eine Zeilensperre aus.

Wenn es sich um ein normales Feld handelt (kein Index/Primärschlüssel), wird durch Auswahl von ..... zum Aktualisieren die Tabelle gesperrt.

Dies ist das Ende dieses Artikels über die Interviewfrage „ob Select for Update die Tabelle oder die Zeile sperrt“. Weitere relevante Select for Update-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Erläuterung der MySQL-Transaktionsauswahl für die Aktualisierung und Datenkonsistenzverarbeitung
  • Analyse des Deadlock-Prozesses in der MySQL-Datenbank (zum Aktualisieren auswählen)
  • Anwendungsbeispiele für MySQL-SELECT-FOR-UPDATE-Anweisungen

<<:  Beispiel für die Implementierung des TikTok-Textschütteleffekts mit CSS

>>:  【HTML-Element】Detaillierte Erklärung des Tag-Textes

Artikel empfehlen

Beispielcode zur Realisierung eines Buchseitenumblättereffekts mit CSS3

Wichtige Erkenntnisse: 1. Beherrschung der CSS3-3...

Vier Modi zum Öffnen und Schließen von Oracle

>1 Starten Sie die Datenbank Geben Sie im cmd-...

So überwachen Sie globale Variablen im WeChat-Applet

Ich bin kürzlich bei der Arbeit auf ein Problem g...

jQuery-Plugin zum Erzielen eines Code-Rain-Effekts

In diesem Artikel wird der spezifische Code des j...

MySQL 8.x MSI-Version Installations-Tutorial mit Bildern und Text

1. MySQL herunterladen Offizielle Website-Downloa...

Jenkins verpackt Microservices, um Docker-Images zu erstellen und auszuführen

Inhaltsverzeichnis Umgebungsvorbereitung Start 1....

Schritte zur Installation von Pyenv unter Deepin

Vorwort In der Vergangenheit habe ich die Python-...

So debuggen Sie das Loader-Plugin in einem Webpack-Projekt

Als ich kürzlich lernte, wie man webpack verwende...

Detailliertes Installations- und Deinstallationstutorial für MySQL 8.0.12

1. Installationsschritte für MySQL-Version 8.0.12...

Detaillierte Erklärung zu Padding und Abkürzungen im CSS-Boxmodell

Wie oben gezeigt, sind Füllwerte zusammengesetzte...

So zeigen Sie die Netzwerkroutingtabelle in Ubuntu an

Was sind Routing und Routing-Tabellen in Linux? U...

Erläuterung des HTML-Tabellenlayouts als Beispiel

Die Elemente in einem HTML-Dokument werden hinter...