트랜잭션 정의
트랜잭션은 데이터베이스의 상태를 변환시키기 위해 수행하는 작업의 단위이다.
여기서 작업의 단위는 하나의 명령어를 뜻하지 않는다.
명령어 하나가 될수도 있고 여러가지 명령어들이 모여 하나의 작업 단위가 될수도 있다.
트랜잭션의 특징
원자성(Atomicity)
- 트랜잭션은 데이터베이스에 전부 반영되던지 전혀 반영되지 않는다
- 사용자의 작업셋을 완벽하게 처리하거나 처리하지 못하면 원상태로 복구한다
일관성(Consistency)
- 트랜잭션이 성공적으로 처리되면 데이터베이스는 일관성을 가져야한다
독립성(Isolation)
- 두 개의 트랜잭션이 동시에 처리될 수 없다
- 하나가 처리될 동안 다른 하나는 대기 후 처리가 완료되면 진행된다
지속성(Durability)
- 성공적으로 트랜잭션이 완료되면 시스템이 고장나더라도 영구적으로 반영되어야한다
MySQL 스토리지 엔진 종류
MySQL은 여러가지 스토리지 엔진이 있다
- show engines; 명령어를 통해 확인 가능
테이블 생성 시 스토리지엔진을 지정해줄 수 있으며 기본값으로 InnoDB를 사용한다
InnoDB 엔진이 만들어지기 전에는 MyISAM이 기본값이었다고 한다.
위 사진을 보면 InnoDB만 트랜잭션을 지원하는 것을 알 수 있다.
InnoDB 와 MyISAM 두 가지 엔진을 이용하여 트랜잭션 유무의 차이를 확인해보자
먼저 MyISAM과 InnoDB 엔진을 이용한 테이블을 만든다
그 다음 두개의 테이블에 id 값이 4인 row를 각각 추가시킨다
그리고 두 개의 테이블에 id 값을 1부터 6까지 추가시켜보자
id 4 에서 키 중복 에러가 발생한다
각 테이블의 데이터를 확인해보자
트랜잭션을 지원하는 InnoDB에서는 작업셋을 완벽하게 처리하지 못해 원상태로 돌아갔지만 MyISAM에서는 에러가 발생한 시점까지는 데이터가 입력된 것을 확인할 수 있다
이 것을 통해 트랜잭션을 지원하는 InnoDB는 원자성을 가진다고 볼 수 있다
댓글