> 데이터 베이스 > MySQL 튜토리얼 > 트리거나 저장 프로시저를 사용하지 않고 SQL에서 사전 업데이트 열 값을 검색하려면 어떻게 해야 합니까?

트리거나 저장 프로시저를 사용하지 않고 SQL에서 사전 업데이트 열 값을 검색하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-03 18:51:39
원래의
647명이 탐색했습니다.

How Can I Retrieve Pre-Update Column Values in SQL Without Using Triggers or Stored Procedures?

SQL만 사용하여 사전 업데이트 값 검색

트리거, 저장 프로시저 또는 외부 엔터티를 사용할 수 없는 시나리오에서는 다음이 필요합니다. SQL을 사용하여 업데이트된 행에서 열의 이전 값을 검색하려면

도전

RETURNING 절에서 직접 업데이트 이전 값을 검색하는 것은 업데이트 이후 값만 반환하므로 불가능합니다.

Self-Join을 이용한 솔루션

해법 업데이트되는 행을 고유하게 식별하는 조건을 사용하여 테이블을 자신의 다른 인스턴스에 조인하는 것입니다. 이를 통해 RETURNING 절의 이전 값과 새 값 모두에 액세스할 수 있습니다.

UPDATE my_table
SET processing_by = our_id_info
FROM my_table AS old_my_table
WHERE old_my_table.trans_nbr = my_table.trans_nbr
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
로그인 후 복사

동시성 처리

잠재적인 경쟁 조건을 방지하려면 동시 쓰기를 방지하는 것이 중요합니다. 업데이트 중에 동일한 행에. 이는 업데이트할 행에 대한 명시적 잠금을 사용하여 달성할 수 있습니다.

UPDATE my_table
SET processing_by = our_id_info
FROM (SELECT * FROM my_table WHERE trans_nbr = 4 FOR UPDATE) AS old_my_table
WHERE old_my_table.trans_nbr = my_table.trans_nbr
RETURNING my_table.row_id, my_table.processing_by, old_my_table.processing_by AS old_processing_by
로그인 후 복사

이렇게 하면 하위 쿼리에 의해 잠긴 행만 처리되어 업데이트 충돌을 방지할 수 있습니다.

위 내용은 트리거나 저장 프로시저를 사용하지 않고 SQL에서 사전 업데이트 열 값을 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿