首頁 > 資料庫 > mysql教程 > 如何在 SQL 更新之前檢索舊列值?

如何在 SQL 更新之前檢索舊列值?

Linda Hamilton
發布: 2025-01-04 07:39:38
原創
152 人瀏覽過

How to Retrieve Old Column Values Before an SQL UPDATE?

如何在UPDATE 之前僅使用SQL 檢索舊列值

問題陳述

儘管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),查詢可以在更新發生之前無縫檢索值。

併發環境的替代方案

在存在大量並發寫入負載的情況下,需要採取額外措施來防止競爭條件:

  1. 可序列化隔離等級:在最嚴格的隔離等級下運作事務,以防止其他事務衝突。
  2. 明確行鎖定:將 FOR UPDATE 子句,請在擷取要更新的行的子查詢中新增 FOR UPDATE 子句,確保只處理鎖定的行。此技術比使用可序列化隔離等級更有效。

以上是如何在 SQL 更新之前檢索舊列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板