트랜잭션 실습
1. 기본 데이터 입력
h2 데이터베이스 콘솔을 사용하여 2개의 세션에서 연결하도록 한다.
먼저 기본 데이터를 다음과 같이 맞춘다.
데이터 초기화 SQL
//데이터 초기화
set autocommit true;
delete from member;
insert into member(member_id, money) values ('oldId',10000);
자동 커밋 모드를 사용했기 때문에 별도의 커밋을 호출하지 않아도 된다.
이렇게 데이터 초기화하고, 세션1, 세션2에서 다음 쿼리를 실행하여 결과를 확인하자.
select * from member;
결과를 이미지와 비교하자 참고로 이미지의 name 필드는 이해를 돕기 위해 그린 것이고 실제는 없다.
2. 신규 데이터 추가 - 커밋 전
세션 1에서 신규 데이터를 추가해보자. 아직 커밋은 하지 않는다.
세션1 신규 데이터 추가 SQL
//트랜잭션 시작
set autocommit false; //수동 커밋 모드
insert into member(member_id, money) values ('newId1',10000);
insert into member(member_id, money) values ('newId2',10000);
결과를 이미지와 비교 시 아직 세션1이 커밋을 하지 않은 상태이기 때문에 세션1에서는 입력한 데이터가 보이지만, 세션2에서는 입력한 데이터가 보이지 않는 것을 확인할 수 있다.
3. 커밋 - commit
세션 1에서 신규 데이터를 입력했는데 아직 커밋은 하지 않았다. 이제 커밋하여 데이터베이스에서 결과를 반영해보자.
세션1 신규 데이터 추가 후 commit
세션1에서 커밋을 호출해보자.
commit; //데이터베이스에 반영
세션1, 세션2에서 다음 쿼리를 실행해서 결과를 확인하자.
select * from member;
세션1이 트랜잭션을 커밋했기 때문에 데이터베이스에 실제 데이터가 반영된다. 커밋 후에는 모든 세션에서 데이터를 조회할 수 있다.
롤백 - Rollback
다시 데이터 초기화한다.
//데이터 초기화
set autocommit true;
delete from member;
insert into member(member_id, money) values ('oldId',10000);
세션1 신규 데이터 추가 후
세션1에서 트랜잭션을 시작 상태로 만든 후 데이터를 추가하자.
//트랜잭션 시작
set autocommit false; //수동 커밋 모드
insert into member(member_id, money) values ('newId1',10000);
insert into member(member_id, money) values ('newId2',10000);
select * from member;
아직 세션1이 커밋을 하지 않은 상태이기 때문에 세션1에서는 입력한 데이터가 보이지만, 세션2에서는 입력한 데이터가 보이지 않는 것을 확인할 수 있다.
세션1 신규 데이터 추가 후 rollback
세션1에서 롤백을 호출해보자
rollback; //롤백으로 데이터베이스에 변경사항을 반영하지 않는다.
'SPRING' 카테고리의 다른 글
트랜잭션(Transaction) 이해 - 1 (0) | 2024.03.05 |
---|---|
커넥션 풀(Connection Pool)과 데이터소스 이해 (0) | 2024.01.12 |
JDBC 이해 (1) | 2024.01.11 |
Spring과 파일 업로드 (0) | 2024.01.03 |
서블릿과 파일 업로드 (1) | 2024.01.03 |
댓글