MySQL에서는 트랜잭션을 시작할 때 평소 START TRANSACTION
구문을 사용했다.
autocommit
모드가 비활성화되어있을 때와 무슨 차이가 있는지 궁금해졌다.
MyISAM 엔진은 트랜잭션을 지원하지 않아 아래 내용은 해당되지 않는다. InnoDB 엔진 기준으로 설명한다.
이 두가지 방법은 각각 명시적, 묵시적 트랜잭션이라고 불린다.
autocommit
모드가 활성화 되어있으면 DML 구문 실행 동시에 자동으로 트랜잭션이 같이 실행되고 커밋된다. 구문 실행이 실패하면 자동으로 롤백된다.
커밋이 바로되므로 롤백을 할 수 없다. 따라서 무언갈 잘못했다면 백업을 활용하거나 기억을 되살려 되돌릴 수 밖에 없다.
MySQL은 기본적으로 autocommit
모드가 활성화되어있다. 이 모드를 비활성화 하는 법은 SET autocommit = 0
을 실행하면 된다.
비활성화됐을 땐 DML 구문 실행 동시에 트랜잭션이 실행되고 수동으로 커밋이나 롤백을 해야한다. 이 상태를 묵시적 트랜잭션이라고 한다.
BEGIN
또는 START TRANSACTION
을 사용해 트랜잭션을 실행할 때는 명시적 트랜잭션이라고 한다.
이는 autocommit
모드를 트랜잭션이 실행되는동안 비활성화시키고, 트랜잭션이 끝나면 그 전 상태로 되돌린다.
둘다 동일한 트랜잭션의 역할을 하나, 트랜잭션의 시작을 명시하는 명시적 트랜잭션을 추천한다.
autocommit
모드의 활성 여부와 전혀 무관해 실수가 일어날 가능성이 적다.