트랜잭션이 진행되는 도중 세션(DBA 또는 관리자에 의해) 강제로 종료되면, MySQL은 해당 트랜잭션을 자동으로 롤백(Rollback)하고 종료합니다. 이는 트랜잭션 내에서 수행된 모든 데이터베이스 변경 사항이 취소된다는 의미입니다. 이처럼 세션이 종료될 때 명시적인 ROLLBACK 명령 없이 자동으로 롤백이 일어나는 것을 암시적 롤백(Implicit Rollback)이라고 합니다.
예제를 통한 확인
먼저 'marks' 테이블에 다음과 같은 데이터가 저장되어 있다고 가정해 보겠습니다.
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 | | 6 | Manak | History | 70 | +------+---------+-----------+-------+ 6 rows in set (0.00 sec)
1단계: 트랜잭션 시작 후 데이터 삭제
새로운 트랜잭션을 시작한 뒤 'marks' 테이블에서 한 행을 삭제해 보겠습니다.
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> Delete from marks where id = 4; Query OK, 1 row affected (0.00 sec)
아직 COMMIT이나 ROLLBACK을 실행하지 않은 상태입니다.
2단계: SHOW PROCESSLIST로 세션 확인
COMMIT 또는 ROLLBACK을 실행하기 전에, 다른 창을 열어 새로운 MySQL 인스턴스에 접속한 후 SHOW PROCESSLIST 명령을 실행하여 현재 활성화된 세션 목록을 확인합니다.
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:49303
db: query
Command: Sleep
Time: 22
State:
Info: NULL
*************************** 2. row ***************************
Id: 3
User: root
Host: localhost:49350
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
2 rows in set (0.00 sec)3단계: KILL 명령으로 세션 종료
이제 KILL 명령을 사용하여 트랜잭션이 진행 중인 세션(Id: 2)을 강제로 종료합니다.
mysql> KILL 2; Query OK, 0 rows affected (0.00 sec)
4단계: COMMIT 시도 시 오류 발생
다시 원래의 트랜잭션 창으로 돌아가 COMMIT 명령을 실행하면 다음과 같은 오류 메시지가 출력됩니다.
mysql> COMMIT; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 4 Current database: query Query OK, 0 rows affected (1.01 sec)
5단계: 롤백 결과 확인
위의 KILL 명령은 현재 세션을 종료하면서 MySQL이 해당 트랜잭션에서 수행한 변경 사항을 강제로 롤백하도록 만듭니다. 아래 쿼리 결과를 보면 'marks' 테이블에서 어떤 행도 삭제되지 않았음을 확인할 수 있습니다.
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 | | 6 | Manak | History | 70 | +------+---------+-----------+-------+ 6 rows in set (0.00 sec)
정리
이 예제를 통해 알 수 있듯이, 세션이 KILL 명령 등으로 강제 종료되면 MySQL은 커밋되지 않은 트랜잭션의 변경 내용을 모두 되돌려 데이터의 일관성을 유지합니다. 이러한 암시적 롤백 동작은 InnoDB와 같은 트랜잭션을 지원하는 스토리지 엔진에서 안전하게 작동하며, 장애 상황에서도 데이터 무결성을 보장하는 중요한 메커니즘입니다.