[sql] 중첩 쿼리를 사용하여 데이터베이스 트랜잭션 구현

관계형 데이터베이스 시스템에서 트랜잭션(transaction)은 한 개 이상의 SQL 명령문을 논리적으로 묶어서 하나의 작업 단위로 정의하는데 사용됩니다. 중첩 쿼리는 하나의 SQL 문장 안에 다른 SQL 문장을 포함시키는 방법으로, 트랜잭션을 구현하는데 유용하게 활용될 수 있습니다.

아래의 예시는 SQL Server에서 중첩 쿼리를 사용하여 데이터베이스 트랜잭션을 구현하는 방법을 보여줍니다.

예시: 중첩 쿼리를 사용한 트랜잭션 구현

BEGIN TRANSACTION;

UPDATE 주문테이블
SET 주문상태 = '처리중'
WHERE 주문번호 = 12345;

IF @@ERROR <> 0
BEGIN
   ROLLBACK TRANSACTION;
   PRINT '주문 처리에 실패했습니다. 트랜잭션을 롤백합니다.';
END
ELSE
BEGIN
   UPDATE 상품테이블
   SET 재고 = 재고 - 1
   WHERE 상품번호 = 67890;

   IF @@ERROR <> 0
   BEGIN
      ROLLBACK TRANSACTION;
      PRINT '상품 재고를 감소하는 동안 에러가 발생했습니다. 트랜잭션을 롤백합니다.';
   END
   ELSE
   BEGIN
      COMMIT TRANSACTION;
      PRINT '주문 처리가 완료되었습니다. 트랜잭션이 성공적으로 커밋되었습니다.';
   END
END

위의 예시에서, BEGIN TRANSACTION 명령문을 사용하여 트랜잭션을 시작하고, COMMIT TRANSACTION 명령문을 사용하여 트랜잭션을 커밋합니다. 만약 중간에 오류가 발생하면 ROLLBACK TRANSACTION 명령문을 사용하여 트랜잭션을 롤백합니다.

중첩 쿼리를 사용한 데이터베이스 트랜잭션 구현은 여러 개의 SQL 명령문을 논리적으로 묶어서 한꺼번에 처리하는 데 유용합니다. 이를 통해 데이터 일관성을 유지하고, 데이터베이스 상태를 안전하게 관리할 수 있습니다.

참고 자료