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

MySQL에서 현재 트랜잭션 중간에 START TRANSACTION을 실행하면 어떻게 될까?

현재 진행 중인 트랜잭션 도중에 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의 사용 시점에 주의해야 합니다.