>데이터 베이스 >MySQL 튜토리얼 >SQL 업데이트 전에 이전 열 값을 검색하는 방법은 무엇입니까?

SQL 업데이트 전에 이전 열 값을 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-04 07:39:38130검색

How to Retrieve Old Column Values Before an SQL 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 절을 추가하여 잠긴 행만 처리되도록 합니다. 이 기술은 직렬화 가능 격리 수준을 사용하는 것보다 더 효율적입니다.

위 내용은 SQL 업데이트 전에 이전 열 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.