Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

세션이 트랜잭션 도중에 종료되면 현재 MySQL 트랜잭션은 어떻게 될까?

트랜잭션이 진행 중인 상태에서 세션(session)이 종료되면, 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)

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE marks SET Name = 'Yash' Where id = 5;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> quit;
Bye

위 예제에서는 UPDATE 문으로 테이블의 값을 변경한 뒤, quit 명령을 실행하여 세션을 종료했습니다. 이후 새로운 세션을 열고 테이블을 다시 조회하면, 앞서 업데이트했던 값이 롤백되어 원래 상태('Yashraj')로 돌아가 있는 것을 확인할 수 있습니다. 그 이유는 트랜잭션이 COMMIT되기 전에 세션이 종료되었기 때문입니다.

핵심 정리

  • 세션이 종료되면 커밋되지 않은 트랜잭션은 자동으로 롤백됩니다.
  • 롤백 시 해당 트랜잭션에서 수행한 INSERT, UPDATE, DELETE 등 모든 변경 사항이 취소됩니다.
  • 변경 사항을 영구적으로 저장하려면 트랜잭션을 종료하기 전에 반드시 COMMIT 문을 실행해야 합니다.