> 데이터 베이스 > MySQL 튜토리얼 > 여러 행을 삽입할 때 MySQL 트리거에서 중복 업데이트를 방지하는 방법은 무엇입니까?

여러 행을 삽입할 때 MySQL 트리거에서 중복 업데이트를 방지하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-29 06:38:13
원래의
558명이 탐색했습니다.

How to Prevent Duplicate Updates in a MySQL Trigger When Inserting Multiple Rows?

삽입 시 다른 테이블의 열을 업데이트하도록 MySQL 트리거

관계형 데이터베이스 시스템에서는 작업을 자동으로 수행해야 할 수도 있습니다. 다른 관련 테이블에서 변경이 발생할 때 한 테이블에서. 여기서 트리거가 유용하게 사용됩니다. 이 특정 인스턴스에서는 새로운 행이 OccupiedRoom 테이블에 삽입될 때 BookingRequest 테이블의 열을 업데이트하는 MySQL의 트리거를 생성하는 것을 목표로 합니다.

제시된 트리거는 BookingRequest 테이블의 상태 열을 업데이트하려고 시도합니다. OccupiedRoom 테이블에 행을 삽입한 직후 BookingRequest 테이블. 그러나 이 접근 방식의 문제는 트리거가 OccupiedRoom 테이블에 삽입된 각 행에 대해 실행되도록 정의되어 있다는 것입니다. 즉, 여러 행이 동시에 삽입되면 여러 번 실행됩니다. 이로 인해 데이터 업데이트가 부정확하거나 일관되지 않을 수 있습니다.

이 문제를 해결하려면 해당 행이 이미 존재하는 경우 BookingRequest 테이블의 상태 열만 업데이트하도록 트리거를 수정해야 합니다. 수정된 버전의 트리거는 다음과 같습니다.

DELIMITER $$
CREATE TRIGGER occupy_trig
AFTER INSERT ON `OccupiedRoom` FOR EACH ROW
begin
  DECLARE id_exists Boolean;
  -- Check BookingRequest table
  SELECT 1
  INTO @id_exists
  FROM BookingRequest
  WHERE BookingRequest.idRequest= NEW.idRequest;

  IF @id_exists = 1
  THEN
    UPDATE BookingRequest
    SET status = '1'
    WHERE idRequest = NEW.idRequest;
  END IF;
END;
$$
DELIMITER ;
로그인 후 복사

이 트리거는 하위 쿼리를 활용하여 idRequest 열을 기반으로 BookingRequest 테이블에 해당 행이 있는지 확인합니다. 일치하는 행이 발견되면 트리거는 상태 열을 '1'로 업데이트합니다. 이 검사를 통합함으로써 트리거가 BookingRequest 테이블의 관련 행만 업데이트하고 부정확하거나 중복된 업데이트 가능성을 제거하도록 보장합니다.

위 내용은 여러 행을 삽입할 때 MySQL 트리거에서 중복 업데이트를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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