트랜잭션(Transaction)이란 여러 SQL 문장을 하나의 작업 단위로 묶어 실행하는 기능입니다. 트랜잭션 내의 어떤 작업이라도 실패하면 전체 트랜잭션이 실패 처리되며 모든 변경 사항을 되돌려야(롤백) 합니다. 반대로 모든 작업이 성공적으로 완료되면 변경 내용이 데이터베이스에 저장됩니다.
MySQL에서는 이러한 트랜잭션을 구현하기 위해 다음과 같은 핵심 문장들을 제공합니다.
START TRANSACTION — 트랜잭션 시작
이름 그대로 트랜잭션을 시작하는 문장입니다. 이 문장을 실행하면 MySQL에게 "이후에 실행되는 문장들을 하나의 작업 단위로 처리하라"고 알리는 것이며, 트랜잭션이 종료(COMMIT 또는 ROLLBACK)될 때까지 그 상태가 유지됩니다.
COMMIT — 변경 사항 확정
COMMIT 문장은 데이터베이스에 대한 변경 사항을 최종적으로 저장합니다. 즉, 트랜잭션이 성공적으로 완료되면 COMMIT 명령을 실행해야 관련된 모든 테이블에 변경 내용이 실제로 반영됩니다.
ROLLBACK — 변경 사항 취소
ROLLBACK 명령은 트랜잭션 중에 수행된 모든 변경 사항을 취소하고 데이터베이스를 트랜잭션이 시작되기 이전 상태로 되돌립니다. 오류가 발생했거나 작업을 취소해야 할 때 유용하게 사용됩니다.
MySQL 트랜잭션 구현 예제
다음은 MySQL에서 트랜잭션을 실제로 구현하는 예제입니다.
예제 1: 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)
위 예제에서는 START TRANSACTION 문장으로 트랜잭션을 시작한 뒤, 두 개의 INSERT 문장을 실행하고 마지막에 COMMIT 문장을 실행했습니다. COMMIT이 수행되면서 변경 사항이 데이터베이스에 저장되었으며, 아래 결과 집합에서 값들이 테이블에 정상적으로 삽입된 것을 확인할 수 있습니다.
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
예제 2: ROLLBACK으로 변경 사항 취소하기
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Aarav','History',40); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Harshit','History',48); Query OK, 1 row affected (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.04 sec)
이번 예제에서도 START TRANSACTION으로 트랜잭션을 시작하고 두 개의 INSERT 문장을 실행했지만, 마지막에 ROLLBACK 문장을 실행했습니다. ROLLBACK이 수행되면 데이터베이스에 가해진 변경 사항이 모두 취소되므로, 아래 결과 집합에서 볼 수 있듯이 새로운 값은 테이블에 삽입되지 않습니다.
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
이처럼 MySQL의 트랜잭션은 START TRANSACTION → 작업 실행 → COMMIT 또는 ROLLBACK의 흐름으로 구현됩니다. 여러 개의 관련 작업을 하나의 단위로 묶어 처리함으로써 데이터의 일관성과 무결성을 보장할 수 있습니다.