트랜잭션(Transaction) 이해 - 2

    트랜잭션 실습

    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

    댓글