본문 바로가기

SQL

트랜잭션 제어: COMMIT과 ROLLBACK을 사용하여 트랜잭션 제어.

반응형

트랜잭션 제어는 데이터베이스 관리에서 중요한 개념으로, 데이터의 일관성과 무결성을 유지하기 위해 사용됩니다. 트랜잭션은 하나 이상의 SQL 명령어들의 모임으로, 모두 함께 성공적으로 실행되거나 실패할 경우 원래 상태로 되돌려야 합니다. 이를 위해 SQL에서는 주로 COMMIT과 ROLLBACK 명령어를 사용합니다. COMMIT은 트랜잭션을 성공적으로 마무리하고 데이터베이스 변경사항을 확정하는데 사용되며, ROLLBACK은 트랜잭션 내의 모든 변경사항을 취소하고 이전 상태로 되돌리는데 사용됩니다. 아래는 트랜잭션 제어와 관련된 예제와 전문용어 설명입니다.

관련 예제


예제 1: 기본 트랜잭션과 COMMIT

BEGIN TRANSACTION;
UPDATE Accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE Accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
계좌 1에서 100을 출금하고 계좌 2에 100을 입금한 후, 트랜잭션을 커밋하여 변경사항을 확정합니다.


예제 2: 에러 발생 시 ROLLBACK

BEGIN TRANSACTION;
INSERT INTO Orders (ProductID, Quantity) VALUES (1, 10);
-- 에러가 발생했다고 가정
ROLLBACK;
주문 정보를 입력하려 했으나 에러가 발생하여 모든 변경사항을 취소합니다.


예제 3: 조건부 COMMIT

BEGIN TRANSACTION;
DELETE FROM Temp_Records;
-- 조건 검사 (예: 삭제된 행의 수 확인)
IF @@ROWCOUNT < 10
    ROLLBACK;
ELSE
    COMMIT;
임시 레코드를 삭제하고, 삭제된 행의 수가 기대치 미만일 경우 롤백, 그렇지 않으면 커밋합니다.


예제 4: 중첩된 트랜잭션

BEGIN TRANSACTION; -- 첫 번째 트랜잭션 시작
UPDATE Products SET Price = Price * 0.9 WHERE CategoryID = 1;

BEGIN TRANSACTION; -- 두 번째 트랜잭션 시작
INSERT INTO SalesLog (ProductID, SalePrice) VALUES (1, 90);
-- 두 번째 트랜잭션을 롤백, 첫 번째는 유지
ROLLBACK;
COMMIT; -- 첫 번째 트랜잭션 커밋
제품 가격을 업데이트하는 트랜잭션과 판매 로그를 기록하는 트랜잭션이 중첩되어 있으며, 내부 트랜잭션을 롤백합니다.

예제 5: SAVEPOINT 사용

BEGIN TRANSACTION;
UPDATE Table1 SET Column1 = 'Value1';
SAVEPOINT SavepointName;
UPDATE Table2 SET Column2 = 'Value2';
-- 문제가 발생하여 Savepoint로 롤백
ROLLBACK TO SavepointName;

COMMIT;
변경사항 중 일부에 대해 롤백하고, 나머지는 커밋합니다. Savepoint를 사용하여 특정 지점까지만 롤백할 수 있습니다.


관련 전문용어 설명
트랜잭션(Transaction): 데이터베이스 상태를 변화시키기 위해 수행하는 작업의 단위입니다. 일련의 연산들을 묶어서 하나의 작업으로 처리합니다.
COMMIT: 트랜잭션 내의 모든 명령어들이 성공적으로 실행되었음을 데이터베이스에 알리고, 변경사항을 영구적으로 저장합니다.
ROLLBACK: 트랜잭션 내의 모든 변경사항을 취소하고, 트랜잭션 시작 전의 상태로 데이터베이스를 되돌립니다.
SAVEPOINT: 트랜잭션 내에서 롤백할 특정 지점을 지정합니다. 문제 발생 시 해당 지점까지만 변경사항을 되돌릴 수 있습니다.

반응형