Heim > Datenbank > MySQL-Tutorial > Wie rufe ich alte Spaltenwerte vor einem SQL-UPDATE ab?

Wie rufe ich alte Spaltenwerte vor einem SQL-UPDATE ab?

Linda Hamilton
Freigeben: 2025-01-04 07:39:38
Original
152 Leute haben es durchsucht

How to Retrieve Old Column Values Before an SQL UPDATE?

So rufen Sie alte Spaltenwerte vor dem UPDATE nur mit SQL ab

Problemstellung

Trotz ihrer robusten Funktionalität stößt die RETURNING-Klausel von SQL auf eine Einschränkung: sie Ruft nur Werte nach der Aktualisierung ab. Dies kann eine Hürde sein, wenn Sie nach den ursprünglichen Werten aktualisierter Spalten suchen, insbesondere in Umgebungen mit hoher Parallelität.

Lösung mit einem Self-Join

Erwin Brandstetters Lösung geht diese Herausforderung elegant an, indem er einen Self-Join verwendet. Join in der FROM-Klausel:

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
Nach dem Login kopieren

Durch die Verknüpfung mit einer anderen Instanz der Tabelle (old_my_table) kann die Abfrage nahtlos abgerufen werden die Werte vor der Aktualisierung.

Alternative für gleichzeitige Umgebungen

In Szenarien mit erheblichen gleichzeitigen Schreiblasten sind zusätzliche Maßnahmen erforderlich, um Race Conditions zu verhindern:

  1. Serialisierbare Isolationsstufe: Führen Sie die Transaktion unter der strengsten Isolationsstufe aus, um zu verhindern, dass andere Transaktionen ausgeführt werden widersprüchlich.
  2. Explizite Zeilensperrung: Fügen Sie der Unterabfrage eine FOR UPDATE-Klausel hinzu, die die zu aktualisierende Zeile abruft, um sicherzustellen, dass nur gesperrte Zeilen verarbeitet werden. Diese Technik ist effizienter als die Verwendung einer serialisierbaren Isolationsstufe.

Das obige ist der detaillierte Inhalt vonWie rufe ich alte Spaltenwerte vor einem SQL-UPDATE ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage