반응형
안녕하세요. 오늘은 MySQL에서 중요한 개념인 트랜잭션 제어에 대해 알아보겠습니다. 특히 START TRANSACTION, COMMIT, ROLLBACK 명령어에 대해 자세히 살펴보겠습니다.
1. START TRANSACTION
START TRANSACTION은 새로운 트랜잭션의 시작을 나타냅니다. 이 명령어 이후에 실행되는 모든 SQL 문은 하나의 작업 단위로 간주됩니다.
예시:
START TRANSACTION;
INSERT INTO accounts (account_number, balance) VALUES (12345, 1000);
UPDATE accounts SET balance = balance - 500 WHERE account_number = 12345;
2. COMMIT
COMMIT은 트랜잭션의 모든 변경사항을 영구적으로 데이터베이스에 저장합니다. COMMIT 이후에는 변경사항을 취소할 수 없습니다.
예시:
START TRANSACTION;
INSERT INTO orders (order_id, product_name, quantity) VALUES (1, 'Laptop', 2);
UPDATE inventory SET stock = stock - 2 WHERE product_name = 'Laptop';
COMMIT;
3. ROLLBACK
ROLLBACK은 트랜잭션의 모든 변경사항을 취소하고 트랜잭션 시작 전 상태로 되돌립니다.
예시:
START TRANSACTION;
DELETE FROM customers WHERE customer_id = 100;
-- 실수로 잘못된 고객을 삭제했다고 가정
ROLLBACK;
이 세 가지 명령어를 적절히 사용하면 데이터의 일관성을 유지하고 오류 발생 시 안전하게 복구할 수 있습니다.
실제 사용 예를 들어보겠습니다:
START TRANSACTION;
UPDATE bank_accounts SET balance = balance - 1000 WHERE account_id = 123;
UPDATE bank_accounts SET balance = balance + 1000 WHERE account_id = 456;
-- 이체 성공 여부 확인
IF (SELECT balance FROM bank_accounts WHERE account_id = 123) >= 0 THEN
COMMIT;
SELECT 'Transaction completed successfully';
ELSE
ROLLBACK;
SELECT 'Transaction failed: Insufficient funds';
END IF;
이 예제에서는 한 계좌에서 다른 계좌로 1000을 이체하는 과정을 보여줍니다. 만약 출금 계좌의 잔액이 충분하다면 COMMIT을 실행하여 이체를 완료하고, 그렇지 않다면 ROLLBACK을 실행하여 이체를 취소합니다.
이렇게 START TRANSACTION, COMMIT, ROLLBACK을 활용하면 복잡한 데이터베이스 작업을 안전하게 수행할 수 있습니다. 데이터의 정합성을 유지하고 예기치 않은 오류로부터 시스템을 보호하는 데 큰 도움이 됩니다.
반응형
'SQL > MYSQL' 카테고리의 다른 글
[MySQL] SET TRANSACTION 사용 방법 및 예시 (0) | 2024.11.14 |
---|---|
[MySQL] LOCK TABLES, UNLOCK TABLES 사용 방법 및 예시 (0) | 2024.11.13 |
[MySQL] LOCK INSTANCE FOR BACKUP, UNLOCK INSTANCE 사용 방법 및 예시 (0) | 2024.11.12 |
[MySQL] SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE SAVEPOINT 사용 방법 및 예시 (0) | 2024.11.11 |
[MySQL] TABLE 문 사용 방법 및 예시 (0) | 2024.11.07 |
[MySQL] EXISTS, NOT EXISTS 사용 방법 및 예시 (0) | 2024.08.19 |
[MySQL] ALL 사용 방법 및 예시 (0) | 2024.08.07 |
[MySQL] ANY, IN, SOME 서브쿼리 사용 방법 및 예시 (0) | 2024.08.06 |