> 데이터 베이스 > MySQL 튜토리얼 > T-SQL에서 원자적이고 안정적인 행 처리를 보장하는 방법은 무엇입니까?

T-SQL에서 원자적이고 안정적인 행 처리를 보장하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-07 13:11:41
원래의
476명이 탐색했습니다.

How to Guarantee Atomic and Reliable Row Handling in T-SQL?

T-SQL을 사용한 원자적이고 안정적인 행 처리

예약 시스템의 무결성을 유지하려면 업데이트 및 삽입을 보장하는 것이 중요합니다. 원자적이고 신뢰할 수 있습니다. 원자성 트랜잭션은 여러 사용자가 동일한 행을 동시에 업데이트하려고 시도하는 경우 단 한 번의 업데이트만 성공하여 경쟁 조건을 방지하도록 보장합니다.

"FlightId"에 고유 인덱스가 있는 "Bookings"라는 테이블이 있다고 가정합니다. 열. 목표는 특정 항공편 ID에 대한 "TicketsBooked" 열을 업데이트하는 저장 프로시저를 만드는 것입니다. 해당 항공편 ID에 해당하는 행이 존재하지 않으면 이를 삽입해야 합니다.

T-SQL을 사용하여 원자적이고 안정적인 작업을 달성하는 방법은 다음과 같습니다.

-- BEGIN TRANSACTION
BEGIN TRANSACTION;

-- Check if the row exists
IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
BEGIN
    -- Update the existing row
    UPDATE Bookings
    SET TicketsBooked = TicketsBooked + @TicketsToBook
    WHERE FlightID = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook);
END
ELSE
BEGIN
    -- Insert a new row
    INSERT INTO Bookings (FlightID, TicketsBooked) VALUES (@Id, @TicketsToBook);
END;

-- COMMIT TRANSACTION
COMMIT TRANSACTION;

-- Return success (TRUE)
SELECT CASE WHEN @@ERROR = 0 THEN 1 ELSE 0 END AS Success;
로그인 후 복사

이것은 저장 프로시저는 BEGIN TRANSACTION 및 COMMIT TRANSACTION 문을 사용하여 트랜잭션 경계를 정의합니다. 트랜잭션 내에서 먼저 IF EXISTS 문을 사용하여 지정된 항공편 ID가 있는 행이 존재하는지 확인합니다. 그렇지 않은 경우 INSERT 문은 새 행을 삽입합니다.

행이 존재하는 경우 업데이트 문은 업데이트된 값이 "TicketsMax" 제한을 초과하지 않는 경우에만 "TicketsBooked" 열을 업데이트합니다. 트랜잭션을 사용하여 업데이트 또는 삽입이 성공적으로 커밋되었는지 확인하거나 오류가 발생하면 트랜잭션이 롤백되는지 확인합니다.

마지막으로 CASE 문은 @@ERROR 전역 변수를 확인하여 트랜잭션의 성공 또는 실패에 따라 부울 값(TRUE 또는 FALSE)을 반환합니다.

위 내용은 T-SQL에서 원자적이고 안정적인 행 처리를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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