본문 바로가기

MySQL

Transaction

트랜잭션은 DBMS에서 SQL이 실행되는 것을 말한다.

 

트랜잭션 시작과 종료

트랜잭션은 시작하는 SQL 명령어는 start transaction이다.

트랜잭션을 성공적으로 종료하는 명령어는 commit.

트랜잭션을 취소하면서 종료하는 명령어는 rollback.

 

트랜잭션 속성

A: 원자성 => 트랜잭션은 전체 성공 또는 전체 실패를 보장한다.

C: 일관성 => 트랜잭션이 끝나면 모순이 없는 상태여야한다. 즉, 중복되는 학번을 저장하려는 트랜잭션은 자동 취소된다

I: 독립성 => 여러개의 트랜잭션이 충돌되지 않음을 보장한다

D: 지속성 => 트랜잭션이 끝난 데이터는 시스템 장애 이유로 날라가는 일 없이 계속 보장이된다.

 

DataBase Lock

예를 들어 어떤 트랜잭션에서 어느 레코드를 수정하는 도중에, 다른 트랜잭션에서 삭제해버리면 문제가 생긴다.

이러한 충돌을 피하기 위해서 트랜잭션에서 데이터를 읽고 쓸 때 다른 트랜잭션에서 방해하지 못하도록 그 데이터를 잠시 잠그는것이 필요하다(Lock).

락에는 읽기 락쓰기 락이있다.

 

읽기 락

트랜잭션이 데이터를 읽기 전에 읽기 락을 건다.

읽기 락은 여러개 중복될 수 있다.

읽기 락과 쓰기락은 중복될 수 없다. 즉 데이터 읽기 작업이 끝나고 읽기락이 풀리면 쓰기락을 걸고 수정하게된다.

 

읽기락의 범위

읽기 락은 트랜잭션이 데이터를 읽기 전에 자동으로 걸지 않는다.

읽기 락을 하냐마냐와 언제까지 유지할는 Transaction Isolation Level에 따라 다르다.

 

쓰기 락

트랜잭션이 데이터를 쓰기 전에 쓰기 락을 건다.

쓰기 락은 여러개 중복될 수 없다.

 

쓰기 락의 범위

쓰기락은 트랜잭션이 데이터를 쓰기 전에 자동으로 걸리게 된다. 

트랜잭션이 종료될 때 쓰기 락이 풀린다

 

'MySQL' 카테고리의 다른 글

Transaction Isolation Level  (0) 2020.01.14
성능 개선  (0) 2020.01.14
RDB vs NoSQL DB  (0) 2020.01.14