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