MySQL에서 현재 트랜잭션 내에서 수행한 변경 사항을 데이터베이스에 영구적으로 기록하려면 COMMIT 명령어를 사용합니다. 트랜잭션이 시작된 상태에서 INSERT, UPDATE, DELETE와 같은 DML 문을 실행하면 그 결과는 아직 임시 상태로 유지됩니다. 이때 COMMIT을 실행해야만 해당 변경 사항이 데이터베이스에 확정되어 영구적으로 반영됩니다.
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 문은 트랜잭션을 명시적으로 종료하며, 그동안 수행된 모든 변경 사항(두 개의 INSERT)이 데이터베이스에 영구적으로 저장됩니다.
저장 결과 확인
COMMIT 이후 테이블을 조회하면 삽입된 데이터가 정상적으로 반영된 것을 확인할 수 있습니다.
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
참고: COMMIT과 ROLLBACK의 차이
COMMIT은 변경 사항을 확정하는 반면, ROLLBACK은 커밋되지 않은 변경 사항을 모두 취소하고 트랜잭션 시작 전 상태로 되돌립니다. 또한 MySQL은 기본적으로 autocommit 모드가 활성화되어 있어, 별도로 트랜잭션을 시작하지 않으면 각 SQL 문이 실행될 때마다 자동으로 커밋됩니다. 따라서 여러 작업을 하나의 단위로 묶어 제어하고 싶다면 START TRANSACTION으로 트랜잭션을 명시적으로 시작한 후, 작업이 완료되었을 때 COMMIT을 실행하는 것이 좋습니다.