MySQL

트랜잭션

M9M9 2020. 10. 12. 01:13

 

 

트랜잭션이란

- 데이터베이스의 상태를 변화시키기 위해 이루어지는 하나의 작업 단위이다. 

여기서 하나의 작업 단위라는 것이 어떤 건지 이해를 쉽게 하기 위해 예를 들어보자면,

 

은행에서 ATM을 통해 돈을 인출한다고 가정하자.

그런데 기계의 오작동으로 돈이 인출되지 않았지만 전산상에는 돈이 인출되었다고 등록되어있다.

또는 돈은 나왔는데 전산상에 등록이 안되었다.

 

이러한 상황이면 굉장히 위험한 상황이다.

그래서 돈이 인출된 기록이 전산에서 올바르게 등록되고, 돈도 제대로 인출이 되어야만 하나의 과정이 정상적으로 처리되었음을 확인할 수 있다.

 

여기서 ATM에서 돈을 인출하는 이 과정이 하나의 묶음으로 처리된다. 

이게 바로 하나의 작업 단위라고 생각하면 된다. 

 

 

트랜잭션 명령어

트랜잭션의 명령어로는 Commit과 ROLLBACK이 있다.

 

COMMIT: 트랜잭션의 한 작업의 단위가 성공적으로 끝났다는 것을 알리고, 데이터베이스에 그 결과를 반영.(저장)

 

ROLLBACK: 트랜잭션의 작업이 진행되는 중, 오류가 발생하면 이루어졌던 모든 트랜잭션 작업을 취소시킨다.(취소)

  

 

 

 

트랜잭션 특성(징) 4가지 (ACID)

트랜잭션은 4가지 특성을 가지고 있다.

 

원자성(Atomicity)

- 트랜잭션의 작업은 데이터베이스에 모두 반영되거나 모두 반영되지 않아야 한다.

- 즉 부분적으로 수행, 취소 없이 모두 완벽히 수행되거나, 하나라도 오류가 있으면 전부 취소돼야 한다.

 

일관성(Consistency)

- 트랜잭션이 성공적으로 완료되면(commit) 일관적인 DB 상태를 유지해야 한다.

- 여기서 말하는 일관성이란, db에 입력된 값이 문자열이었다가, 갑자기 정수형으로 변하던가 이러지 않는 걸 말한다.

- 즉, 하나의 타입만 입력되는 것처럼 일관성 있어야 한다.

 

격리성(Isolation)

- 트랜잭션 수행 시 다른 트랜잭션의 작업이 끼어들지 못한다.

- 트랜잭션끼리 간섭할 수 없다.

 

지속성(Durability)

- 성공적으로 완료된 트랜잭션은 어떠한 일이 었어도 영구적으로 반영되어야 한다.

- 즉, commit 진행 시, 그 상태가 영원히 보장.