T-SQL에서 원자적이고 안정적인 행 업데이트 보장
데이터 관리 영역에서는 종종 업데이트를 수행하기 전 행. 이는 데이터 무결성과 원자성이 가장 중요한 시나리오에서 특히 중요합니다. 이 기사에서는 테이블에 행이 있는지 확인하고, 없으면 단일 트랜잭션 범위 내에서 삽입하는 신뢰할 수 있는 접근 방식을 살펴봅니다.
원자적이고 신뢰할 수 있는 행 업데이트
초과 예약을 방지하고 각 예약의 신뢰성을 보장하는 것이 필수적인 예약 시스템을 고려해보세요. 이 기능을 구현하려면 두 작업(업데이트 또는 삽입)이 모두 성공적으로 실행되거나 둘 다 롤백되어 데이터 무결성을 유지하도록 보장하는 원자적이고 안정적인 접근 방식이 필요합니다.
코드 검사
제공된 코드 조각은 Bookings 테이블의 행 업데이트를 시도합니다. 그러나 행이 존재하지 않으면 시나리오를 올바르게 처리하지 못합니다. 또한 기존 행을 확인하기 위해 쿼리에 @@ROWCOUNT를 사용하면 데이터 불일치 문제가 발생합니다.
향상된 코드 구현
이러한 문제를 수정하고 원하는 동작을 보장하려면, 수정된 코드가 표시됩니다 아래:
-- Initiate transaction (assuming SQL Server) BEGIN TRANSACTION -- Attempt to update row UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax >= (TicketsBooked + @TicketsToBook) -- Check if row updated IF @@ROWCOUNT = 0 BEGIN -- Insert new row (if row doesn't exist) INSERT INTO Bookings ... (omitted) END -- Transaction completion (commit or rollback based on result) IF @@ERROR = 0 BEGIN COMMIT TRANSACTION SELECT 1 AS Result -- Return true (if transaction committed) END ELSE BEGIN ROLLBACK TRANSACTION SELECT 0 AS Result -- Return false (if transaction failed) END
설명
이 향상된 코드에는 몇 가지 중요한 수정 사항이 포함되어 있습니다.
위 내용은 T-SQL에서 원자적이고 안정적인 행 업데이트를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!