Heim >Datenbank >Oracle >Was ist die Verwendung von for update in Oracle?

Was ist die Verwendung von for update in Oracle?

WBOY
WBOYOriginal
2022-03-02 12:05:3714872Durchsuche

In Oracle ist „zur Aktualisierung“ eine Sperre auf Zeilenebene, mit der eine Sperre auf Zeilenebene auf eine Zeile angewendet wird. Der gesperrte Benutzer kann die Datenzeile abfragen und aktualisieren, andere Benutzer können die gesperrte Zeile jedoch nicht abfragen und aktualisieren Zeile. Zeile, die Syntax lautet „SELECT * FROM Tabellenname WHERE Spaltenname FOR UPDATE;“.

Was ist die Verwendung von for update in Oracle?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.

Was ist die Verwendung von „for update“ in Oracle? 1. Definition von „for update“ ist eine Sperre auf Zeilenebene, auch exklusive Sperre genannt , dann kann dieser Benutzer gesperrte Datenzeilen abfragen und aktualisieren, während andere Benutzer gesperrte Datenzeilen nur abfragen, aber nicht aktualisieren können. Wenn andere Benutzer Datenzeilen in der Tabelle aktualisieren möchten, müssen sie auch Sperren auf Zeilenebene auf die Tabelle anwenden. Selbst wenn mehrere Benutzer gemeinsame Aktualisierungen für eine Tabelle verwenden, dürfen zwei Transaktionen eine Tabelle nicht gleichzeitig aktualisieren. Wenn die Tabelle tatsächlich aktualisiert wird, ist die Tabelle ausschließlich gesperrt, bis die Transaktion festgeschrieben oder wiederhergestellt wird. Zeilensperren sind immer exklusive Sperren.

Die gemeinsame Aktualisierungssperre wird nur aufgehoben, wenn eine der folgenden Bedingungen eintritt: 1. Führen Sie die Commit-Anweisung (COMMIT) aus.

2. Verlassen Sie die Datenbank (LOG OFF).

3. Das Programm wird nicht mehr ausgeführt

2. Konzept und Verwendung

Normalerweise sperrt die Select-Anweisung die Daten nicht und verhindert, dass andere DML- und DDL-Vorgänge beeinträchtigt werden. Gleichzeitig wird die Select-Anweisung durch die Unterstützung des konsistenten Lesemechanismus für mehrere Versionen nicht durch andere Arten von Anweisungen blockiert.

Die Anweisung „select … for update“ ist eine manuelle Sperranweisung, die wir häufig verwenden. Wenn Sie select ... zum Aktualisieren in der Datenbank ausführen, werden Sie feststellen, dass die Tabelle oder bestimmte Zeilendaten in MySQL gesperrt sind. Wenn die Abfragebedingung einen Primärschlüssel enthält, werden die Zeilendaten gesperrt Andernfalls wird der Tisch gesperrt.

Da InnoDB standardmäßig auf Zeilensperre setzt, führt MySQL nur dann eine Zeilensperre aus (sperrt nur die ausgewählten Daten), wenn der Primärschlüssel „eindeutig“ angegeben ist. Andernfalls führt MySQL eine Tabellensperre aus (sperrt das gesamte Datenformular). . Zum Beispiel: Angenommen, es gibt einen Tabellenbenutzer mit zwei Spalten: ID und Name, und ID ist der Primärschlüssel.

Beispiel 1: (Primärschlüssel explizit angeben, und die Daten sind vorhanden, Zeilensperre)

SELECT * FROM user WHERE id=3 FOR UPDATE;
SELECT * FROM user WHERE id=3 and name='Tom' FOR UPDATE;

Beispiel 2: (Primärschlüssel explizit angeben, aber die Daten sind nicht vorhanden, keine Sperre)

SELECT * FROM user WHERE id=0 FOR UPDATE;

Beispiel 3: (Der Primärschlüssel ist nicht klar, Tabellensperre)

SELECT * FROM user WHERE id<>3 FOR UPDATE;
SELECT * FROM user WHERE id LIKE &#39;%3%&#39; FOR UPDATE;

Beispiel 4: (Kein Primärschlüssel, Tabellensperre)

SELECT * FROM user WHERE name=&#39;Tom&#39; FOR UPDATE;

Hinweis:

1. FOR UPDATE gilt nur für InnoDB und muss sich im Transaktionsverarbeitungsmodul befinden ( BEGIN/COMMIT) wirksam werden.

2. Um die Sperrsituation zu testen, können Sie den Befehlsmodus von MySQL verwenden, um zwei Fenster zum Testen zu öffnen.

3. Myisam unterstützt nur Sperren auf Tabellenebene, während InnerDB Sperren auf Zeilenebene unterstützt. Daten mit hinzugefügten Sperren (Sperren auf Zeilenebene/Sperren auf Tabellenebene) können nicht durch andere Transaktionen gesperrt oder geändert werden. Wenn es sich um eine Sperre auf Tabellenebene handelt, wird die Tabelle unabhängig davon gesperrt, ob der Datensatz abgefragt wird.

3. Wann müssen Sie das Update verwenden?

Mit Hilfe der for update-Anweisung können wir Datensperr- und Schutzvorgänge auf Anwendungsebene manuell implementieren. Wenn Sie exklusive Daten auf Unternehmensebene benötigen, können Sie die Verwendung von for update in Betracht ziehen.

In Szenarien wie der Buchung von Bahntickets wird das Ticket auf dem Bildschirm angezeigt. Bei der tatsächlichen Ausstellung des Tickets muss jedoch erneut bestätigt werden, dass die Daten nicht von anderen Kunden geändert wurden. Daher können Sie während dieses Bestätigungsprozesses die Aktualisierung durchführen. 4. Pessimistische Sperre für Updates Andere Wenn Sie diese Daten erhalten möchten, werden sie blockiert, bis sie entsperrt werden. Viele solcher Sperrmechanismen werden in herkömmlichen relationalen Datenbanken verwendet, z. B. Zeilensperren, Tabellensperren, Lesesperren, Schreibsperren usw., die alle vor Operationen gesperrt werden. Genau wie beim Update ist auch die Implementierung des synchronisierten Schlüsselworts in Java eine pessimistische Sperre.

Optimistische Sperre: Wie der Name schon sagt, ist es sehr optimistisch. Jedes Mal, wenn Sie die Daten abrufen, denken Sie, dass andere sie nicht ändern werden, sodass Sie sie nicht sperren In diesem Zeitraum können Mechanismen wie Versionsnummern verwendet werden. Die optimistische Sperre eignet sich für Anwendungstypen mit mehreren Lesevorgängen, wodurch der Durchsatz verbessert werden kann. Der von der Datenbank bereitgestellte Mechanismus write_condition ist tatsächlich eine optimistische Sperre. Empfohlenes Tutorial: „

Oracle Video Tutorial

Das obige ist der detaillierte Inhalt vonWas ist die Verwendung von for update in Oracle?. 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