


Alte Spaltenwerte während eines UPDATEs mit reinem SQL abrufen
Einführung
Beim Aktualisieren von Zeilen in einer Datenbank kann es nützlich sein, auf das Original zuzugreifen Werte der aktualisierten Spalten. SQL bietet zwar die RETURNING-Klausel zum Abrufen von Post-Update-Werten, unterstützt jedoch nicht das direkte Abrufen der alten Spaltenwerte. In diesem Artikel wird eine Problemumgehung zum Abrufen sowohl neuer als auch alter Spaltenwerte während eines UPDATE-Vorgangs untersucht.
Lösung mit einem Self-Join
Trotz der Einschränkung der RETURNING-Klausel ist es möglich, auf die ursprüngliche Spalte zuzugreifen Werte, indem die Tabelle mit sich selbst verknüpft wird. Diese Technik macht Trigger oder gespeicherte Prozeduren überflüssig.
UPDATE my_table SET processing_by = our_id_info -- unique to this worker FROM my_table AS old_my_table WHERE trans_nbr IN ( SELECT trans_nbr FROM my_table GROUP BY trans_nbr HAVING COUNT(*) > 1 LIMIT our_limit_to_have_single_process_grab ) AND my_table.row_id = old_my_table.row_id RETURNING my_table.row_id, my_table.processing_by, old_my_table.processing_by AS old_processing_by;
Diese Abfrage führt die folgenden Schritte aus:
- Filtert und identifiziert Zeilen, die mithilfe einer Unterabfrage aktualisiert werden sollen.
- Verknüpft die Tabelle mithilfe eines Alias (old_my_table) mit sich selbst, um auf die Originalspalte zuzugreifen Werte.
- Setzt processing_by auf our_id_info und verknüpft nur bei übereinstimmenden Zeilen-IDs.
- Gibt die Zeilen-ID, den neuen processing_by-Wert und den alten processing_by-Wert zurück.
Vermeiden Probleme mit gleichzeitigen Schreibvorgängen
Während die Self-Join-Lösung ohne gleichzeitige Schreiblast gut funktioniert, ist sie führt zu Parallelitätsproblemen, wenn mehrere Arbeiter versuchen, dieselben Zeilen zu aktualisieren. Um dieses Problem zu beheben:
Serialisierbare Isolationsstufe
Durch die Serialisierung von Transaktionen mit der Isolationsstufe SERIALIZABLE wird sichergestellt, dass keine anderen Transaktionen während eines Vorgangs auf Daten zugreifen können. Dies kann sich jedoch auf die Leistung auswirken.
Explizite Sperrung
Das Sperren der bestimmten zu aktualisierenden Zeile mithilfe der FOR UPDATE-Klausel verhindert, dass andere Transaktionen sie ändern, bis der Vorgang abgeschlossen ist. Dies gewährleistet die Datenintegrität bei gleichzeitiger Beibehaltung der Leistung.
UPDATE tbl x SET tbl_id = 23 , name = 'New Guy' FROM (SELECT tbl_id, name FROM tbl WHERE tbl_id = 3 FOR UPDATE) y WHERE x.tbl_id = y.tbl_id RETURNING y.tbl_id AS old_id, y.name AS old_name , x.tbl_id, x.name;
Fazit
Durch die Verwendung eines Selbst-Joins und die Anwendung von Mechanismen zur Parallelitätskontrolle ist es möglich, während eines UPDATE sowohl alte als auch neue Spaltenwerte abzurufen Operation mit reinem SQL. Dieser Ansatz bietet Flexibilität und Kontrolle bei der Handhabung von Datenänderungen in Datenbanksystemen.
Das obige ist der detaillierte Inhalt vonWie kann ich alte Spaltenwerte während eines SQL-UPDATE-Vorgangs abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.

Artikel erläutert die Sicherung von MySQL gegen SQL-Injektions- und Brute-Force-Angriffe unter Verwendung vorbereiteter Aussagen, Eingabevalidierung und starken Kennwortrichtlinien (159 Zeichen).


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)