현재 진행 중인 트랜잭션 도중에 START TRANSACTION 명령을 실행하면, 기존 트랜잭션은 자동으로 커밋된 후 종료됩니다. 즉, 해당 트랜잭션에서 수행된 모든 데이터베이스 변경 사항이 영구적으로 저장됩니다. 이러한 동작을 START TRANSACTION 명령에 의한 암시적 커밋(implicit commit)이라고 부릅니다.
예제
'marks' 테이블에 다음과 같은 데이터가 있다고 가정해 보겠습니다.
mysql> select * from marks; +------+---------+-----------+-------+ | Id | Name | Subject | Marks | +------+---------+-----------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | | 3 | Gaurav | Comp | 69 | +------+---------+-----------+-------+ 3 rows in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(4, 'Rahul','History',40); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(5, 'Yashraj','English',48); Query OK, 1 row affected (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec)
위 예제에서 확인할 수 있듯이, 트랜잭션이 진행되는 중간에 START TRANSACTION 문이 다시 실행되면 현재 트랜잭션은 암시적으로 종료되며, 그동안 수행된 변경 사항들이 커밋됩니다.
mysql> select * from marks; +------+---------+-----------+-------+ | Id | Name | Subject | Marks | +------+---------+-----------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | | 3 | Gaurav | Comp | 69 | | 4 | Rahul | History | 40 | | 5 | Yashraj | English | 48 | +------+---------+-----------+-------+ 5 rows in set (0.00 sec)
최종 조회 결과를 보면, 첫 번째 트랜잭션에서 INSERT한 Rahul과 Yashraj의 데이터가 롤백되지 않고 테이블에 그대로 반영된 것을 알 수 있습니다. 이는 중간에 실행된 START TRANSACTION이 암시적 커밋을 발생시켰기 때문입니다. 따라서 트랜잭션 작업 중에는 의도치 않은 커밋을 방지하기 위해 START TRANSACTION의 사용 시점에 주의해야 합니다.