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 |