MySQL 트랜잭션
MySQL 트랜잭션
트랜잭션이란?
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말합니다.
SQL(Select, Insert, Delete, Update)을 이용하여 데이터베이스에 접근하는 것을 의미 합니다.
트랜잭션의 4가지 특징
- Atomicity (원자성)
- Consistency (일관성)
- Isolation (독립성)
- Durability (지속성)
- Atomicity (원자성) – 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 합니다. (Commit and Rollback).
- Consustency (일관성) – 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 합니다. 트랜잭션이 진행 되는 동안 데이터베이스가 변경 되더라도 업데이트 된 데이터베이스로 진행 되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행됩니다.
- Isolation (독립성) – 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 하나의 트랜잭션이 다른 트랜잭션의 연산에 끼어들 수 없습니다. 하나가 완료 될때까지 다른 트랜잭선이 특정 트랜잭션의 결과를 참조할 수 없습니다.
- Durability (지속성) – 트랜잭션이 성공적으로 완료된 경우 결과값이 영구적으로 반영 되어야 합니다.
MyISAM과 InnoDB의 트랜잭션 차이점
Primary Key 값이 설정된 테이블에 c 라는 row값이 존재 할때 a,b,c 라는 값을 Insert 하면 c값의 Primary Key 값이 중복되기 때문에 InnoDB 스토리지 엔진의 경우 아무런 값도 insert 되지 않습니다. 반면 MyISAM 스토리지 엔진은 a,b 는 insert 되며 c 값만 중복처리 됩니다.
이런 트랜잭션을 처리 하기 위해서 MyISAM은 쿼리를 생성할때 부터 IF ELSE 구문등을 이용해서 예외처리를 해줘야 합니다. 이러한 방식 때문에 MyISAM 스토리지 엔진은 Rollback 처리가 번거롭고 어렵습니다.
주의사항
트랜잭션은 DBMS의 커넥션과 동일하게 꼭 필요한 최소의 코드에만 적용하는 것이 좋습니다. 프로그램 코드에서 트랜잭션의 범위를 최소화 하라는 것 입니다.
최신 댓글