儘管SQL 的RETURNING 子句功能強大,但仍面臨一個限制:僅檢索更新後的值。在尋求更新列的原始值時,這可能是一個障礙,特別是在高度並發的環境中。
Erwin Brandstetter 的解決方案透過使用自連接優雅地解決了這一挑戰。在 FROM 子句中加入:
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
透過加入表格的另一個實例 (old_my_table),查詢可以在更新發生之前無縫檢索值。
在存在大量並發寫入負載的情況下,需要採取額外措施來防止競爭條件:
以上是如何在 SQL 更新之前檢索舊列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!