cleanUrl: /posts/mysql-transaction-lock-isolate

이 포스팅은 Real MySQL 트랜잭션 chapter 를 읽고 작성한 부분입니다. 저는 MySQL, MongoDB, 현재는 Elastic Search 까지 회사에서 필요한 요구사항에 맞춰 개발중입니다. 그런데 4년이나 사용한 MySQL 내부에 대해 정확히 모른다는게 말이 안되는거 같아 이 책을 읽게 되었습니다.

MySQL 을 현업에서 활발히 사용하는 개발자라면 이 책을 꼭 강추합니다 꼭 구매해서 읽어보세요!

개발자와 DBA를 위한 Real MySQL

MySQL의 InnoDB 사용자 라면 MySQL의 트랜잭션과 잠금, 격리 정리 부분 부터 읽는것을 추천한다.

트랜잭션

작업의 완전성을 보장해주는 것이다.

논리적인 작업셋을 모두 완벽하게 처리하거나 처리하지 못할 경우 원 상태로 복구(roll back)을 해서 일부분만 업데이트(partial update) 되는 현상을 예방해야 한다.

트랜잭션을 지원하지 않는 MyISAM 과 트랜잭션을 지원하는 InnoDB 처리 방식의 차이를 살펴본다.

MySQL 에서의 트랜잭션

txn 정의: 트랜잭션은 반드시 여러개의 query 가 있을 때만 의미있는 것이 아니다. 하나의 논리적인 작업에 논리적인 작업 set 자체가 100% 적용되거나 (commit을 실행했을 때) 또는 아무것도 적용되지 않아야 함을(Rollback 또는 트랜잭션을 Rollback 시키는 오류가 발생했을 때) 보장해주는 것이다.

# myisam
create table tab_myisam (
	fdpk int not null,
	primary key (fdpk)
) engine = MyISAM;
insert into tab_myisam (fdpk) values (3);
create table tab_innodb (
	fdpk int not null,
	primary key (fdpk)
) engine = INNODB;
insert into tab_innodb (fdpk) values (3);

위와 같이 테이블을 만들고 pk가 3인 데이터를 먼저 insert 한다.

insert int tab_myisam (fdpk) values (1), (2), (3);
insert int tab_innodb (fdpk) values (1), (2), (3);