트랜잭션
트랜잭션은 작업의 완전성을 보장해 주는 것이다. 논리적인 작업 셋이 완전히 적용되거나 아무것도 적용되지 않아야 한다. 트랜잭션이 없다면 작업 셋의 일부만 변경되는 Partial update가 발생해 문제가 생길 수 있다.
InnoDB 스토리지 엔진은 트랜잭션을 지원하지만 MyISAM이나 MEMORY 스토리지 엔진은 트랜잭션을 지원하지 않는다.
AUTO-COMMIT을 활성화하고 MyISAM 테이블과 InnoDB 테이블을 생성
mysql> SET auto-commit=ON;
mysql> CREATE TABLE tab_myisam( fdpk INT NOT NULL, PRIMARY KEY (fdpk) ) ENGINE=MyISAM;
mysql> CREATE TABLE tab_innodb( fdpk INT NOT NULL, PRIMARY KEY (fdpk) ) ENGINE=INNODB;
PK가 3인 레코드를 1건 저장
mysql> INSERT INTO tab_myisam (fdpk) VALUES (3);
mysql> INSERT INTO tab_innodb (fdpk) VALUES (3);
PK가 3인 레코드를 포함하는 INSERT 문을 실행. 키가 중복되어 SQL 에러가 발생
mysql> INSERT INTO tab_myisam (fdpk) VALUES (1), (2), (3);
ERROR 1062 (23000): Duplicate entry '3' for key 'tab_myisam.PRIMARY'
mysql> INSERT INTO tab_innodb (fdpk) VALUES (1), (2), (3);
ERROR 1062 (23000): Duplicate entry '3' for key 'tab_innodb.PRIMARY'
MyISAM은 1, 2 번 레코드를 저장한채 쿼리를 종료하지만 InnoDB는 해당 트랜잭션을 롤백
mysql> select * from tab_myisam;
+------+
| fdpk |
+------+
| 1 |
| 2 |
| 3 |
+------+
mysql> select * from tab_innodb;
+------+
| fdpk |
+------+
| 3 |
+------+
'Database' 카테고리의 다른 글
[MySQL] 데이터 압축 (0) | 2023.03.24 |
---|---|
[MySQL] 잠금 (0) | 2023.03.15 |
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 4 (0) | 2023.03.01 |
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 3 (0) | 2023.02.08 |
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 2 (2) | 2023.02.01 |