원자적이고 안정적인 행 업데이트 보장: 존재 여부 확인 및 없는 경우 삽입
T-SQL 저장 프로시저에서 업데이트를 목표로 합니다. 테이블의 행을 삭제하거나, 존재하지 않는 경우 삽입합니다. 이는 원자성과 신뢰성이 가장 중요한 예약 시스템에 매우 중요합니다.
행 존재 확인
지정된 FlightId가 있는 행이 존재하는지 확인하려면 EXISTS 연산자:
IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
행이 존재하는 경우 내부 쿼리는 비어 있지 않은 결과를 반환하고 IF 조건이 TRUE로 평가됩니다.
행이 존재하지 않는 경우 삽입
ELSE 블록 내부에서 행이 존재하지 않는 경우 삽입 작업을 수행할 수 있습니다. :
INSERT INTO Bookings ... (omitted)
취급조건 위반
귀하의 질문은 항공편당 예약 가능한 최대 티켓 수에 제한을 적용해야 한다는 점을 강조하고 있습니다. 이는 UPDATE 문의 TicketsMax 열을 확인하여 달성할 수 있습니다.
UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
조건을 위반하는 경우(예: 이미 예약된 티켓이 너무 많은 경우) UPDATE가 실패하며 FALSE를 반환할 수 있습니다. 작업 실패를 나타냅니다.
거래 관리
원자성 및 안정성을 보장하려면 작업을 트랜잭션 내에 포함하세요.
BEGIN TRANSACTION -- Perform operations (update/insert/condition check) IF @@error = 0 BEGIN COMMIT TRANSACTION RETURN TRUE END ELSE BEGIN ROLLBACK TRANSACTION RETURN FALSE END
@@error 시스템 변수는 데이터베이스 작업의 성공 또는 실패를 나타냅니다. 오류가 발생하면(@@error ≠ 0) 트랜잭션이 롤백되고 FALSE를 반환합니다. 그렇지 않으면 트랜잭션이 커밋되고 성공적인 예약을 나타내기 위해 TRUE가 반환됩니다.
위 내용은 최대 예약 제한을 처리하면서 T-SQL에서 행을 원자적으로 업데이트하거나 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!