> 데이터 베이스 > MySQL 튜토리얼 > 최대 예약 제한을 처리하면서 T-SQL에서 행을 원자적으로 업데이트하거나 삽입하는 방법은 무엇입니까?

최대 예약 제한을 처리하면서 T-SQL에서 행을 원자적으로 업데이트하거나 삽입하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-07 13:06:41
원래의
503명이 탐색했습니다.

How to Atomically Update or Insert Rows in T-SQL, Handling Maximum Booking Limits?

원자적이고 안정적인 행 업데이트 보장: 존재 여부 확인 및 없는 경우 삽입

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

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