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

MySQL에서 현재 트랜잭션을 명시적으로 종료하는 방법

MySQL에서 진행 중인 트랜잭션을 명시적으로 종료하는 방법은 크게 두 가지가 있습니다. 바로 COMMIT 명령어와 ROLLBACK 명령어입니다.

1. COMMIT 명령어로 종료하기

현재 실행 중인 트랜잭션에 대해 COMMIT 명령어를 실행하면 트랜잭션이 명시적으로 종료되며, 그동안 수행한 모든 변경 사항이 데이터베이스에 영구적으로 저장(커밋)됩니다.

예제

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

mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55);
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

위 예제에서 COMMIT 문은 트랜잭션을 명시적으로 종료하고, 삽입된 데이터의 변경 사항을 최종 확정합니다.

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

SELECT 쿼리 결과를 보면 두 개의 INSERT 작업이 모두 정상적으로 반영되어 있음을 확인할 수 있습니다.

2. ROLLBACK 명령어로 종료하기

반대로 ROLLBACK 명령어를 실행하면 현재 트랜잭션이 명시적으로 종료되며, 트랜잭션 시작 이후 수행한 모든 변경 사항이 취소되고 원래 상태로 되돌아갑니다.

예제

'marks' 테이블에 다음과 같은 데이터가 있다고 가정하고, 트랜잭션을 시작한 뒤 ROLLBACK 명령어를 적용해 보겠습니다.

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

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

mysql> INSERT INTO Marks Values(3, 'Rahul','History',40);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(4, 'Yashraj','English',48);
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.04 sec)

위 예제에서 ROLLBACK 문은 트랜잭션을 명시적으로 종료하며, 트랜잭션 내에서 수행한 INSERT 작업들은 모두 취소됩니다.

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

결과를 확인해 보면 트랜잭션 중에 추가했던 'Rahul'과 'Yashraj'의 데이터는 존재하지 않고, 트랜잭션 시작 전 상태 그대로 유지되는 것을 알 수 있습니다.

정리

즉, MySQL 트랜잭션을 명시적으로 종료하는 방법은 다음과 같이 요약할 수 있습니다.

  • COMMIT: 변경 사항을 확정하여 저장하고 트랜잭션을 종료
  • ROLLBACK: 변경 사항을 취소하고 원래 상태로 되돌린 후 트랜잭션을 종료