>데이터 베이스 >MySQL 튜토리얼 >트리거를 사용하여 동일한 테이블의 행을 업데이트하는 방법: 겹치는 기간에 대한 솔루션?

트리거를 사용하여 동일한 테이블의 행을 업데이트하는 방법: 겹치는 기간에 대한 솔루션?

Patricia Arquette
Patricia Arquette원래의
2024-10-28 17:15:29566검색

How to Update Rows in the Same Table Using Triggers: A Solution to Overlapping Time Periods?

트리거를 사용하여 동일한 테이블에서 다른 행 업데이트

문제:

기록 유지 기간이 겹치는 경우 기존 범위와 겹치는 startDate를 사용하여 새 레코드를 삽입할 때 이전 레코드의 종료 날짜를 업데이트해야 하는 경우가 많습니다.

원래 시도:

제공된 트리거는 ADDDATE(NEW.startDate, -1) 값을 사용하여 기존 행의 endDate를 업데이트하려고 시도합니다. 여기서 procKey는 NEW 행과 일치하고 endDate는 20501231입니다. 그러나 이 접근 방식을 사용하면 "업데이트할 수 없습니다"라는 오류가 발생합니다. 저장된 함수/트리거의 테이블 'split'은 이 저장 함수/트리거를 호출한 문에서 이미 사용되었기 때문입니다."

해결책:

안타깝게도 트리거는 트리거를 트리거한 행과 동일한 테이블의 다른 행을 직접 업데이트합니다. 대신 대체 접근 방식이 필요합니다.

저장 프로시저 사용:

다음 논리를 캡슐화하는 저장 프로시저를 만듭니다.

  1. 분할 테이블에 새 행을 삽입하거나 업데이트합니다.
  2. 새 행과 일치하는 procKey와 미래 날짜(예: 20501231)와 일치하는 endDate를 사용하여 이전 행의 endDate를 업데이트하여 ADDDATE(NEW. startDate, -1).
  3. 변경 사항이 지속되도록 트랜잭션을 커밋합니다.

이 접근 방식을 사용하면 단일 트랜잭션 내에서 동일한 테이블의 여러 행을 업데이트할 수 있습니다. 트리거로 인해 발생할 수 있는 충돌.

위 내용은 트리거를 사용하여 동일한 테이블의 행을 업데이트하는 방법: 겹치는 기간에 대한 솔루션?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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