Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

트랜잭션 - DB 예제3 - 트랜잭션 실습 본문

인프런/[인프런] 스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 - DB 예제3 - 트랜잭션 실습

Seung__ 2022. 6. 1. 17:37

1. 기본 데이터 입력

먼저 H2 데이터베이스 웹 콘솔 창을 2개 열어두자.

주의!
H2 데이터베이스 웹 콘솔 창을 2개 열때 기존 URL을 복사하면 안된다.
꼭 http://localhost:8082 를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. 
URL을 복사하면 같은 세션( jsessionId )에서 실행되어서 원하는 결과가 나오지 않을 수 있다

 

기본 데이터

데이터 초기화 SQL

//데이터 초기화
set autocommit true;
delete from member;
insert into member(member_id, money) values ('oldId',10000);

 

 

2. 신규 데이터 추가 - commit 전

세션1에서 신규 데이터를 추가해보자. 아직 커밋은 하지 않을 것이다.

 

세션1 신규 데이터 추가

//트랜잭션 시작
set autocommit false; //수동 커밋 모드
insert into member(member_id, money) values ('newId1',10000);
insert into member(member_id, money) values ('newId2',10000);

 

세션1과 세션2에서 member를 조회해 보자.

  • 아직 세션1이 커밋을 하지 않은 상태이기 때문에 세션1에서는 입력한 데이터가 보이지만, 
  • 세션2에서는 입력한 데이터가 보이지 않는 것을 확인할 수 있다.

 

3. 신규 데이터 추가 - commit 후

 

세션1에서 commit을 하자.

commit; //데이터베이스에 반영

세션1과 세션2에서 member를 조회해보자.

  • 결과를 이미지와 비교해보자. 
  • 세션1이 트랜잭션을 커밋했기 때문에 데이터베이스에 실제 데이터가  반영된다. 
  • 커밋 이후에는 모든 세션에서 데이터를 조회할 수 있다.

 

 

4. 롤백 - rollback

데이터 초기화

 

기본 데이터

데이터 초기화 SQL

//데이터 초기화
set autocommit true;
delete from member;
insert into member(member_id, money) values ('oldId',10000);

 

세션1 데이터 추가

//트랜잭션 시작
set autocommit false; //수동 커밋 모드
insert into member(member_id, money) values ('newId1',10000);
insert into member(member_id, money) values ('newId2',10000);

 

세션1과 세션2에서 member를 조회해 보자.

  • 세션1에서 아직 commit을 안했기 때문에 세션2에서 볼 수 없다.

 

세션1에서 rollback

rollback; //롤백으로 데이터베이스에 변경 사항을 반영하지 않는다.

 

세션1과 세션2에서 member를 조회해 보자.

  • 롤백으로 데이터가 DB에 반영되지 않은 것을 확인할 수 있다.
Comments