Spring/SpringDB

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

느리지만 꾸준하게 2022. 6. 15. 15:41

h2 DB console 창 2개 띄워놓는다.

 

 

기본 데이터는 아래와 같고

 

데이터 초기화 SQL을 처음 h2 DB에 실행해준다.

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

 

데이터를 초기화하고, 세션1, 세션2에서 아래 쿼리를 실행해서 결과를 확인해보자.

select * from member;

 

 

신규 데이터 추가 - 커밋 전

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

 

 

신규 데이터 추가 SQL

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

 

세션1, 세션2에서 다음 쿼리를 실행해서 결과를 확인

select * from member;

결과 이미지와 비교해보면 세션 1이 커밋을 하지 않은 상태여서 세션1에서는 입력한 데이터가 보이지만, 세션2에서는 데이터가 보이지 않는다.

 

 

커밋

세션 1에서 신규 데이터 입력 => 커밋 x => 커밋해서 DB 결과를 반영

 

세션 1에서 커밋을 호출

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

 

 

세션1, 세션2에서 쿼리를 실행해서 결과 확인

select * from member;

결과 이미지와 비교해보자. 세션 1이 트랜잭션을 커밋해서 DB에 실제 데이터가 반영됨. 커밋 이후에 모든 세션에서 데이터를 조회할 수 있다.

 

 

 

롤백 -rollback

예제를 처음으로 돌리기 위해 데이터 초기화

//데이터 초기화
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에서 다음 쿼리 실행해서 결과 확인

select * from member;

 

 

신규 데이터 추가 후 rollback

세션1에서 롤백을 호출

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

 

 

세션1, 세션2에서 쿼리를 실행해서 결과를 확인

select * from member;

 

결과 이미지와 비교, 롤백으로 데이터가 DB에 반영되지 않았다.

 

 

<출처 김영한: 스프링 DB 1편 - 데이터 접근 핵심 원리>

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의

www.inflearn.com

 

'Spring > SpringDB' 카테고리의 다른 글

DB 락 - 변경 / 조회  (0) 2022.06.15
트랜잭션 - DB 예제 - 계좌이체  (0) 2022.06.15
트랜잭션 - DB 예제 2 - 자동 커밋 / 수동 커밋  (0) 2022.06.15
트랜잭션 - 개념 이해  (0) 2022.06.15
DataSource 적용  (0) 2022.06.14