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.
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
Durch die Verknüpfung mit einer anderen Instanz der Tabelle (old_my_table) kann die Abfrage nahtlos abgerufen werden die Werte vor der Aktualisierung.
In Szenarien mit erheblichen gleichzeitigen Schreiblasten sind zusätzliche Maßnahmen erforderlich, um Race Conditions zu verhindern:
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!