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

Detailliertes Tutorial zum Erstellen eines Gitlab-Servers auf CentOS8.1

Über den Unterschied zwischen Gitlab und Github m...

Detaillierte Erläuterung der MySQL-Multitabellen-Joinabfrage

Inhaltsverzeichnis Abfrage zum Verbinden mehrerer...

MySQL REVOKE zum Löschen von Benutzerberechtigungen

In MySQL können Sie mit der REVOKE-Anweisung best...

Lösung für viele Zeilenumbrüche und Wagenrückläufe in MySQL-Daten

Inhaltsverzeichnis Finden Sie das Problem 1. So e...

Drei gängige Möglichkeiten zum Einbetten von CSS in HTML-Dokumente

Die folgenden drei Methoden werden häufig verwende...

Allgemeine Betriebsbefehle von MySQL im Linux-System

Aufschlag: # chkconfig --list Alle Systemdienste ...

So installieren Sie Docker auf Ubuntu20.04 LTS

Null: Alte Version deinstallieren Ältere Versione...

Der Button hat einen hässlichen grauen Rand. Wie kann ich ihn entfernen?

Ich habe den Dialog beim Schließen verwendet und e...

Das Konzept und die Eigenschaften von benutzerdefinierten MySQL-Variablen

Ein MySQL Custom Value ist ein temporärer Contain...