[다시보기 Mysql] 2. Storage Engine & Transaction
Storage Engine
- 데이터를 직접적으로 다루는 역할을 하고 엔진마다 동작 원리가 다르다.
- 그래서 각 엔진마다 transaction, 성능 등 다르게 동작한다.
- Mysql 스토리지 엔진은 Plugin 방식으로 구현되어 있고, 아래 명령어로 종류를 확인 할 수 있다.
SHOW ENGINES;
- Table 생성시에 ENGINE 선택
CREATE TABLE a (no INT) ENGINE = INNODB;
- 현재 생성된 Table 의 엔진 확인
SHOW TABLE STATUS
관련 링크
- https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html
- http://asuraiv.blogspot.com/2017/07/mysql-storage-engine.html
- https://nomadlee.com/mysql-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95/
Transaction 이란?
- 쪼개질 수 없는 업무처리의 단위
- 안전성을 확보하기 위한 방법
Transaction 특징
- Transaction 이 안전하게 수행된다는 것을 보장하기 위한 특징
- ACID
원자성 (Atomicity)
- DB에 모두 반영되거나, 혹은 전혀 반영되지 않음
일관성 (Consistency)
- 작업 처리 결과는 항상 일관성이 있어야함.
독립성 (Isolation)
- 동시에 두개 이상의 트랜잭션이 병행 실행되고 있을 때, 다른 트랜잭션 영향을 줄 수 없다.
영구성 (Durability)
- 트랜잭션이 성공적으로 완료 되었으면 결과는 영구적으로 반영
Transaction 을 처리하기 위한 명령어
Commit
- 하나의 트랜잭션 처리가 성공적으로 끝났을 때
Rollback
- 한개의 트랜잭션 처리가 비정상 종료되어 원자성이 깨졌을 경우에 트랜잭션을 처음부터 다시 시작하거나, 부분적으로만 연산된 결과를 다시 취소시킴
Mysql 에서는?
START TRANSACTION;
(Transaction)
COMMIT; (or ROLLBACK;)
- 직접 table 을 생성하여 테스트 해보자
use test; #database 선택
- table 생성
CREATE TABLE `test`.`temp-test` (
`no` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`no`));
commit 테스트
START TRANSACTION;
insert into `test`.`temp-test` (`name`) values ('akageun');
COMMIT;
결과
select * from `test`.`temp-test`;
rollback 테스트
START TRANSACTION;
insert into `test`.`temp-test` (`name`) values ('akageun2');
ROlLBACK;
결과 확인
- 위 commit 처럼 테스트 했을 때, 결과가 다르지 않음.
commit
을 다시 테스트 해보자- PK 가 하나 증가한 상태로 입력된게 보인다.
참고사항
- MySQL의 엔진에 영향을 받음
- InnoDB 로 사용해야 Transaction 을 사용할 수 있다.