MySQL에서 데이터의 무결성을 보장하고, 실수나 오류 발생 시 되돌릴 수 있는 안전장치가 바로 트랜잭션이다.
이러한 트랜잭션의 시작을 선언하는 명령어로는 START TRANSACTION과 함께 자주 사용되는 BEGIN 명령어가 있다.
✅ BEGIN 명령어란?
BEGIN은 MySQL에서 트랜잭션을 시작하는 명령어이다.
기능적으로는 START TRANSACTION과 완전히 동일하며, 두 명령어는 서로 대체 가능하다.
BEGIN;
-- 또는
START TRANSACTION;
다만, BEGIN이라는 단어는 저장 프로시저(Stored Procedure)나 조건문 블록 등에서도 사용되기 때문에,
명확한 트랜잭션 목적이라면 START TRANSACTION 사용을 권장하는 경우가 많다.
그러나 코드 간결성이나 습관적으로 BEGIN을 사용하는 개발자도 매우 많으며, MySQL 공식 문서에서도 BEGIN을 정식으로 트랜잭션 시작 명령어로 인정하고 있다.
🔍 트랜잭션이 중요한 이유
MySQL에서 트랜잭션은 아래 조건을 만족하는 작업 단위이다.
- 원자성(Atomicity): 모든 작업이 전부 성공하거나 전부 실패한다.
- 일관성(Consistency): 트랜잭션 전후의 상태가 일관되게 유지된다.
- 격리성(Isolation): 동시에 실행되는 트랜잭션 간 간섭이 없다.
- 지속성(Durability): COMMIT 이후 변경된 내용은 영구적으로 저장된다.
이러한 특징 덕분에, 복잡한 데이터 처리 상황에서도 BEGIN을 이용한 트랜잭션 관리로 안정성을 확보할 수 있다.
✅ BEGIN 사용 전 autocommit 설정 확인
MySQL은 기본적으로 autocommit 모드가 활성화되어 있다.
따라서 DML(INSERT, UPDATE, DELETE) 실행 시 즉시 반영되므로 트랜잭션이 제대로 동작하지 않는다.
SET autocommit = 0;
위와 같이 설정하면, 수동으로 트랜잭션을 시작하고, 명시적으로 COMMIT이나 ROLLBACK을 수행할 수 있게 된다.
🧪 BEGIN 명령어 실전 예제
예제를 통해 BEGIN 명령어의 실제 사용 방법을 살펴보자.
SET autocommit = 0;
BEGIN;
UPDATE bank_accounts SET balance = balance - 5000 WHERE account_id = 101;
UPDATE bank_accounts SET balance = balance + 5000 WHERE account_id = 202;
COMMIT;
위 예제는 A 계좌에서 B 계좌로 5000원을 이체하는 로직이다.
도중에 오류가 발생하면 ROLLBACK을 사용하여 이전 상태로 되돌릴 수 있다.
예외 상황을 포함한 예제는 다음과 같다.
BEGIN;
UPDATE products SET stock = stock - 1 WHERE product_id = 300;
-- 재고가 마이너스면 롤백 처리
SELECT IF((SELECT stock FROM products WHERE product_id = 300) < 0, ROLLBACK(), COMMIT());
이 예제는 재고 감소 이후 조건에 따라 자동으로 COMMIT 또는 ROLLBACK을 결정하는 흐름이다.
이처럼 BEGIN은 다양한 조건 로직과 함께 실무에서 유연하게 활용할 수 있다.
🧠 자주 하는 실수와 주의사항
- autocommit을 끄지 않고 BEGIN만 실행
→ 실질적으로 트랜잭션이 작동하지 않는다. - MyISAM 엔진에서 트랜잭션 사용 시도
→ MyISAM은 트랜잭션을 지원하지 않으므로 반드시 InnoDB 사용 - BEGIN 블록 중간에 오류 발생 후 COMMIT 호출
→ COMMIT을 호출하면 잘못된 데이터까지 반영되므로, 중간 오류 체크는 필수 - 트랜잭션이 종료되지 않아 세션이 잠기는 경우
→ COMMIT 또는 ROLLBACK으로 명확하게 종료 처리할 것
✅ BEGIN vs START TRANSACTION
구분 | BEGIN | START TRANSACTION |
기능 | 동일 | 동일 |
가독성 | 짧고 간결 | 명확한 의도 전달 |
사용처 | 트랜잭션, 블록, 저장 프로시저 등 | 트랜잭션 전용 |
추천 | 혼용 가능, 상황에 따라 선택 |
정리하자면 BEGIN은 간단한 코드에는 유리하고, START TRANSACTION은 문서화나 교육 자료 등에서 더 권장된다.
📌 BEGIN 명령어 요약
- BEGIN은 트랜잭션을 수동으로 시작할 때 사용한다.
- autocommit을 반드시 꺼야 제대로 작동한다.
- COMMIT 또는 ROLLBACK을 명시적으로 호출해야 트랜잭션이 종료된다.
- InnoDB 엔진에서만 트랜잭션이 적용된다.
- 실무에서는 START TRANSACTION과 병행하여 유연하게 사용한다.
📎 공식 문서 참고
- MySQL 공식 BEGIN 문서:
https://dev.mysql.com/doc/refman/8.0/en/commit.html
'DB' 카테고리의 다른 글
[MySQL] ROLLBACK TO SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 까지 롤백) (1) | 2025.06.18 |
---|---|
[MySQL] SAVEPOINT 완벽 가이드 사용법(트랜잭션 중간 지점 저장) (1) | 2025.06.17 |
[MySQL] ROLLBACK 완벽 가이드 사용법(변경사항 취소) (0) | 2025.06.17 |
[MySQL] COMMIT 완벽 가이드 사용법(변경사항 확정) (0) | 2025.06.17 |
[MySQL] START TRANSACTION 완벽 가이드 사용법(트랜잭션 제어 시작) (0) | 2025.06.17 |
[MySQL] SHOW CREATE USER 완벽 가이드 사용법(계정 생성 정보 확인) (0) | 2025.04.02 |
[MySQL] RESET PASSWORD 완벽 가이드 사용법(비밀번호 변경) (0) | 2025.04.02 |
[MySQL] SHOW PRIVILEGES 완벽 가이드 사용법(모든 권한 확인) (0) | 2025.04.02 |