ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 221229. DB 7. 트랜잭션
    스타터스 백엔드 3기 2022. 12. 29. 10:09

    하루입니다.

     


     

    트랜잭션의 특징

    1. 원자성 : all or nothing. 송금과 출금을 하나로 묶어 더이상 분해 불가한 원자로 취급한다.

    2. 격리성 : 트랜잭션 진행 중에는 중간 상태를 보거나 변경 불가하다

    3. 일관성 : 데이터의 무결성을 지킨다.

    4. 영속성 : 트랜잭션 성공시 수정된 데이터를 시스템에 영구적으로 적용한다.

     

     

     

     

    • employee 계정에서 300번 사원을 delete해도 root 계정에서는 정상출력된다.
    • autocommit을 false로 했기에 root에서는 commit되지 않은 delete 전의 값이 출력되기 때문이다.

     


     

     

    격리성

    • table에 변경이 있는데 commit을 하지 않고 다른 계정에서 접근하려고 해서 발생한 에러이다.

     


     

    • 양쪽에서 commit해야 root에서도 테이블을 확인할 수 있다!

     

     


     

     

    트랜잭션 안 하는 경우 : 계좌이체 실패 시나리오

    • A가 B에게 5000원을 송금하려 합니다.
    • 정상적인 결과라면 A의 잔액은 5000원, B의 잔액은 5000원이 되어야 합니다.
    • A의 잔액에서 5000원이 빠집니다.
    • B의 잔액에 5000원이 추가되어야 하나, 계좌번호를 'BB'라고 적었기에 오류가 발생합니다.
    • 하지만 AUTOCOMMIT이 켜져있기에 A의 계좌에서는 이미 5000원이 빠졌습니다. B의 계좌는 여전히 0원입니다.
    • 사라진 5000원 ... 

     

     

     

     

    트랜잭션 하는 경우 : 계좌이체 성공 시나리오

    • A가 B에게 5000원을 송금하려 합니다.
    • 정상적인 결과라면 A의 잔액은 5000원, B의 잔액은 5000원이 되어야 합니다.
    • A의 잔액에서 5000원이 빠집니다.
    • B의 잔액에 5000원이 추가되어야 하나, 계좌번호를 'BB'라고 적었기에 오류가 발생합니다.
    • 하지만 AUTOCOMMIT이 꺼져있기에(COMMIT을 하지 않았기에) A계좌에서 빠진 5000원을 ROLLBACK해 원상복구가 가능합니다.
    • 결과는 A가 만원, B가 0원으로 처음과 같은 값입니다.

     

     

     

     


     

     

Designed by Tistory.