Engineering Note

[Database] 트랜잭션과 잠금(MySQL) 본문

Computer Science/Database

[Database] 트랜잭션과 잠금(MySQL)

Software Engineer Kim 2026. 1. 1. 21:07

트랜잭션

- 작업의 완전성을 보장해주는 것

 

- 동시성을 제어하기 위한 기능

- 여러 커넥션에서 동시에 동일한 자원(레코드나 테이블)을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할

 

격리 수준

- 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것진지를 결정하는 레벨

 

 

트랜잭션

 

MySQL 엔진 별 트랜잭션 지원

엔진 트랜잭션 지원 여부
InnoDB O
MyISAM X
MEMORY X

 

 

 

 

MySQL에서의 트랜잭션

트랜잭션

- 여러 개의 변경 작업을 수행하는 쿼리가 조합되거나 또는 하나의 변경 작업을 수행하는 쿼리거나 상관없이 논리적인 작업 세트 자체가 100% 적용되거나(commit 실행됐을 때) 아무것도 적용되지 않아야(ROLLBACK 또는 트랜잭션을 ROLLBACK 시키는 오류가 발생했을 때)함을 보장해 주는 것이다.

 

 

InnoDB와 MyISAM차이

CREATE TABLE tab_myisam (fdpk INT NOT NULL, PRIMARY KEY (fdpk)) ENGINE=MyISAM;
INSERT INTO tab_myisam (fdpk) value (3);

CREATE TABLE tab_innodb (fdpk INT NOT NULL, PRIMARY KEY (fdpk)) ENGINE=INNODB;
INSERT INTO tab_innodb (fdpk) value (3);

SET autocommit=on;

insert into tab_myisam (fdpk) VALUE (1), (2), (3);
insert into tab_innodb (fdpk) VALUE (1), (2), (3);

 

 

위 코드를 실행한 결과

모두 '3'을 저장할 때 프라이머리 키 중복 오류로 쿼리가 실패한다. 하지만 MyISAM은 1,2는 저장을 시키고 InnoDB는 1과 2를 저장하지 않고 rollback 시킨다. 이렇게 MyISAM 테이블에서 발생하는 현상을 부분 업데이트라고 표현하며, 이러한 부분 업데이트는 데이터의 정합성을 맞추는데 상당히 어려운 문제를 만들어 낸다.

 

 

 

myisam은 

 

 

 

참고 자료 : Real MySQL(백은빈, 이성욱, p155 트랜잭션과 잠금)

Comments