-
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원으로 처음과 같은 값입니다.

'스타터스 백엔드 3기' 카테고리의 다른 글
유데미 스타터스 취업 부트캠프 3기 - 백엔드 6주차 (0) 2022.12.30 221229. DB 8. JDBC (0) 2022.12.29 221228. DB 6. 함수, (트랜잭션) (0) 2022.12.28 221227. DB 5. 조인 (0) 2022.12.27 221226. DB 4. 서브쿼리 (0) 2022.12.26