본문 바로가기

강의 내용 정리/Spring DB 1

3-3. 트랜잭션 - DB 예제1 - 개념 이해, 3-4. 트랜잭션 - DB 예제2 - 자동 커밋, 수동 커밋

데이터 변경 쿼리를 실행하고 DB에 그 결과를 반영하려면 commit 을 호출하고 결과를 반영하고 싶지 않으면 rollback 을 호출하면 된다.

-> 어? 나는 DB에 INSERT 쿼리 날리면 바로 반영 되던데요?

-> 보통 AutoCommit 이 켜져있다.

 

 

세션 1에서 데이터 추가하고 아직 commit 하지 않은 상태라고 하자.

-> 세션2 에서는 SELECT해도 신규회원이 안보인다.

-> 세션1 에서는 SELECT해도 신규회원이 보인다.

 

 

 

 

commit하지 않은 데이터가 다른 세션에서 조회가능하면 어떤 문제가 발생할까?

 

세션1 - 데이터 추가 (아직 commit 전)

세션2 - 데이터 조회 (commit안한 데이터가 조회됐다고 가정)

세션1 - 추가 했던 데이터 삭제

 

-> 데이터 정합성 문제

 

 

따라서 commit 전 데이터는 다른 세션에서 보이지 않는다.

(하지만 앞서 배운 트랜잭션 격리 수준을 READ UNCOMMITTED 로 설정하면 조회 되긴 한다.

 보통 DB 의 트랜잭션 격리 수준은 READ COMMITTED가 기본값으로 설정 되어있다.)

 

 

 

 

만약 신규데이터 추가 후 commit 대신 rollback을 하면 모두 트랜잭션 시작 직전 상태로 복구된다.

 

 

 

 

 

 

---------------------------------

 

3-5. 트랜잭션 - DB 예제2 - 자동 커밋, 수동 커밋

 

 

 

set autocommit true; //자동 커밋 모드 설정
insert into member(member_id, money) values ('data1',10000); //자동커밋

insert into member(member_id, money) values ('data2',10000); //자동 커밋

 

( 오토커밋이므로 commit; 해줄 필요 없다. )

오토 커밋 모드는 내부적으로 한 줄씩 트랜잭션 열었다 닫았다 반복한다.

 

 

 

하지만 수동커밋을 내가 트랜잭션 범위를 변경 할 수 있다.

commit 이나 rollback 반드시 호출!

-> 둘 다 안하면 DB의 기본 타임아웃 시간 넘어가면 자동으로 rollback됨.

 

 

 

트랜잭션을 시작한다 = 수동 커밋모드로 바꾼다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 본 게시글은 인프런 김영한님의 강의를 수강 후 반복학습을 위해 정리한 내용입니다.

 

 

꾸준히 다시보자.

 

1. 221014

2. 221101

Recent Posts
Popular Posts
Recent Comments