Skip to Content
Suffering builds character
아카이브14.데이터베이스트랜잭션2. 스토리지 엔진별 트랜잭션 지원 비교

2. 스토리지 엔진별 트랜잭션 지원 비교

MySQL은 스토리지별로 트랜잭션을 지원 여부가 다름

sql
CREATE DATABASE engine_trx_test; USE engine_trx_test;
sql
DROP TABLE IF EXISTS myisam_table; DROP TABLE IF EXISTS innodb_table;
sql
CREATE TABLE myisam_table ( id INT NOT NULL, PRIMARY KEY(id) ) ENGINE=MyISAM;
sql
INSERT INTO myisam_table (id) VALUES (3);
sql
CREATE TABLE innodb_table ( id INT NOT NULL, PRIMARY KEY(id)) ENGINE=INNODB;
sql
INSERT INTO innodb_table (id) VALUES (3);
sql
INSERT INTO myisam_table (id) VALUES (1), (2), (3); INSERT INTO innodb_table (id) VALUES (1), (2), (3);

→ ERROR. Duplicate entry ‘3’ for key ‘myisam_table.PRIMARY’ Duplicate entry ‘3’ for key ‘innodb_table.PRIMARY’

sql
SELECT * FROM myisam_table; SELECT * FROM innodb_table;

공통점
두 테이블 모두 1과 2는 INSERT 처리 후 3을 INSERT하는 과정에서 에러가 발생

차이점
MyISAM 엔진을 사용한 테이블(myisam_table)의 경우 1과 2는 저장 후 3만 에러로 처리
1과 2는 저장이 되었음(Partial Update)

InnoDB 엔진을 사용한 테이블(innodb_table)의 경우 1과 2는 성공적으로 INSERT 처리가 수행되더라도,
3에서 문제가 발생했기 때문에 INSERT 쿼리 자체를 수행하기 전의 상태로 복구시킨 후 쿼리 수행을 종료함

Last updated on