삽입 시 다른 테이블의 열을 업데이트하도록 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!