尽管 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中文网其他相关文章!