ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TRANSACTION
    데이터베이스 with MSSQL/SQL 입문 2022. 4. 11. 13:58

    1. 필요성

    COMMIT과 ROLLBACK을 통해 원자성을 보장받을 수 있다.

    만약 TRANSACTION을 선언하지 않으면 한 문장이 끝날 때 마다 자동으로 COMMIT이 이루어진다.

    COMMIT은 작성한 코드를 데이터베이스에 갱신을 하겠다는 뜻이다.

    ROLLBACK은 작성한 코드를 COMMIT이 이루어진 지점 전까지 취소를 하겠다는 뜻이다.

     

    한 가지 주의할 점은 TRANSACTION을 사용할 때는 꼭 원자적으로 실행될 구문만 넣어야한다.

    TRANSACTION이 사용되는 동안 ROLLBACK이나 COMMIT이 되기 전까지는 다른 연산은 모두 멈추게 된다.

    이는 마치 C#에서 lock을 사용하는 것과 같다. 이렇게 lock을 걸어놓는 행위는 성능적인 이슈가 발생할 수 있기 때문에 마구 남용해서는 안된다.

     

    2. 사용

    BEGIN TRAN; -- BEGIN TRANSACTION으로도 사용가능
    	INSERT INTO accounts VALUES(3, 'CODA2', 100, GETUTCDATE());
    COMMIT;
    
    BEGIN TRAN;
    	INSERT INTO accounts VALUES(2, 'CODA', 100, GETUTCDATE());
    ROLLBACK;

    COMMIT한 구문은 데이터베이스에 반영이 되어있고 ROLLBACK한 구문은 데이터베이스에 반영되어 있지 않음을 알 수 있다.

     

    3. 응용

    BEGIN TRY
    	BEGIN TRAN;
    		INSERT INTO accounts VALUES(4, 'CODA4', 100, GETUTCDATE());
    		INSERT INTO accounts VALUES(5, 'CODA5', 100, GETUTCDATE());
    	COMMIT;
    END TRY
    BEGIN CATCH
    	IF @@TRANCOUNT > 0 -- 현재 활성화된 트랜잭션 수를 반환
    		ROLLBACK
    END CATCH

    C#에 있는 try~catch구문과 매우 유사하다.

    만약에 2개의 INSERT INTO 구문 중에서 하나가 처리되지 않았다면 CATCH구문에서 ROLLBACK을 실행시키는 예외처리 방법이다.

     

     

    '데이터베이스 with MSSQL > SQL 입문' 카테고리의 다른 글

    윈도우 함수  (0) 2022.04.11
    변수와 흐름 제어  (0) 2022.04.11
    JOIN  (0) 2022.04.08
    UNION, INTERSECT, EXCEPT  (0) 2022.04.08
    인덱스(INDEX)  (0) 2022.04.08
Designed by Tistory.