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 중국어 웹사이트의 기타 관련 기사를 참조하세요!