11.MySql(scott)-기본문법 - DML(트랜잭션 및 커밋과 롤백)

JungSik Heo·2024년 12월 21일
0

MySQL

목록 보기
23/33

1.트랜잭션의 이해?

위의 그림은 A가 B에게 돈을 이체 할 때 하나의 트랜잭션에 들어가는 4개의 문장이다.

즉 이런 일련의 작업 단위들을(Seelct문, Update문 등..) 일어나는 과정들을 묶어서 트랜잭션이라고 말을 한다.

하나의 작업단위(All or nothing)

위 사례를 통해서 알 수 있는 트랜잭션의 특징은 아래와 같다.

트랜잭션의 특징

  1. Atom(원자성 = All or Nothing) : 위의 사례에서 4개의 명령어가 모두 처리되거나 아니면 하나도 처리되지 않아야 한다.

  2. Consistency(일관성) : 일관성 있는 통일이 되어야 하지 않을까?

  3. Isolation(독립성) : 상대방의 갱신을 못 봐야 한다.(계좌를 생각하면 쉽다.)
    ㄴ> Lock 정책

  4. Durability(지속성) : 영구적으로 보관되어야 하지 않겠는가?

ACID, 외우기 보다는 하나의 사례 즉, 계좌를 통해 생각하면 매우 쉬운 특징이다.

2. COMMIT 과 ROLLBACK

주의) MySQL Workbench로 MySQL DB에 접속했을 때 AutoCommit 설정이 기본값
아래를 테스트 하기 위하여서는 AutoCommit설정을 해제하고 테스트 하여야 한다.

아래의 두개 설정을 바꿔 주도록 함. 그리고 다시 프로그램을 실행 시켜야합니다.

edit -> preference 로 들어감

COMMIT: 트랜젝션의 모든 데이터 변경사항을 DB에 영구 반영
커밋을 하면 롤백을 해도 되돌릴수 없다.

ROLLBACK: 트랜젝션의 모든 데이터 변경사항을 취소

  • 하나의 트랜젝션은 하나 이상의 SQL문이 포함되며, 분할할수 없는 최소의 단위임. 그러므로 전부 적용하거나 전부 취소됨 (ALL or Nothing)
  • 트랜젝션 내 모든 데이터 변경 사항은 트랜젝션 종료 전까진 임시적임
  • 따라서 데이터 변경 전 데이터로 복구 가능함

아래의 테스트 구분으로 테스트 해볼것

select * from dept;
INSERT INTO dept VALUES(9, 'TT', 'TT');
UPDATE dept SET loc = '서울';
DELETE FROM dept WHERE deptno = 9;
COMMIT;
ROLLBACK; 

롤백 적용되지 않는 DDL문
모든 명령어에 대하여 트랜잭션의 롤백 명령이 적용되는 것은 아니다.
DDL문(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 transaction의 rollback 대상이 아니다.

profile
쿵스보이(얼짱뮤지션)

0개의 댓글