SQL AUTO Commit

KUN·2025년 3월 18일

DDL 배우기 에서....
Auto Commit 이란?

MySQL에서 Auto Commit은 트랜잭션을 자동으로 커밋하는 기능입니다.
기본적으로 MySQL은 Auto Commit 모드가 활성화되어 있어, 각 SQL 문이 실행될 때마다 자동으로 커밋됩니다.

MySQL 문서 를 보면...
SET autocommit disables or enables the default autocommit mode for the current session.
Auto Commit 설정은 세션 단위로 적용됩니다. 세션이 종료되면, 기본값인 autocommit = 1로 돌아갑니다.

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}
Auto Commit 활성화: SET autocommit = 1;
Auto Commit 비활성화: SET autocommit = 0;

활성화 상태: 각 SQL 문은 트랜잭션을 자동으로 커밋하고, 독립적으로 처리됩니다.
비활성화 상태: 여러 SQL 문을 트랜잭션 안에서 묶어 실행하고, 최종적으로 COMMIT 또는 ROLLBACK을 통해 처리합니다.

장점 :
간편함:
	기본적으로 자동 커밋이 활성화되기 때문에, 사용자가 별도로 COMMIT을 호출할 필요 없이 간단한 쿼리 실행이 가능합니다.
	빠른 테스트나 트랜잭션을 관리할 필요 없는 작업에 유용합니다.

트랜잭션 관리 불필요:
	자동으로 각 SQL 문을 독립적인 트랜잭션으로 처리하므로, 트랜잭션 관리에 대한 복잡한 고민이 필요 없습니다.
	개발자가 트랜잭션을 명시적으로 관리할 필요가 없으므로 코드가 간결해집니다.

에러 발생 시 영향 범위 제한:
	한 SQL 문이 실패하더라도 그 문만 롤백되고 다른 쿼리에 영향을 미치지 않기 때문에, 예기치 않은 롤백을 피할 수 있습니다.

세션 종료 시 자동 복원:
	세션이 끝날 때마다 기본값(autocommit = 1)으로 자동 복원되므로, 별도의 설정을 다시 할 필요가 없습니다.

단점 :
트랜잭션 제어 부족:
	각 SQL 문이 독립적인 트랜잭션으로 처리되기 때문에, 여러 문을 묶어서 하나의 트랜잭션으로 처리해야 할 경우 불편합니다.
	예를 들어, 여러 개의 INSERT나 UPDATE 쿼리를 하나의 트랜잭션으로 묶어야 할 경우, 자동 커밋이 비효율적일 수 있습니다.

예기치 않은 커밋:
	자동 커밋이 활성화되어 있으면, 의도치 않은 커밋이 발생할 수 있습니다. 예를 들어, 트랜잭션을 관리할 계획이 없는 상태에서 쿼리가 실행될 때 자동으로 커밋되어, 작업을 되돌리기 어려운 상황이 발생할 수 있습니다.
    
에러 발생 시 복구 어려움:
	한 SQL 문에서 에러가 발생하면 그 문만 롤백되고, 이전에 실행된 SQL 문들은 이미 커밋되었기 때문에 전체 트랜잭션을 롤백하는 것처럼 처리할 수 없습니다.
	복잡한 작업을 할 때는 에러 처리나 롤백을 고려한 트랜잭션 제어가 필요합니다.
    
대규모 트랜잭션 관리 어려움:
	복잡한 트랜잭션을 처리할 때는 여러 쿼리가 모여야 하고, 이를 하나의 트랜잭션으로 묶어 처리해야 하므로, 자동 커밋 모드에서는 관리가 어렵습니다. 이 경우, 트랜잭션을 수동으로 관리하는 것이 더 적합할 수 있습니다.

결론 : 간단한 쿼리나 독립적인 SQL 문을 실행할 때 유용하다.
하지만, 복잡한 트랜잭션 제어나 다수의 쿼리를 하나로 묶는 경우는 비활성화 하는것이 좋다.

profile
배우노라, 실험하노라, 기록하노라

0개의 댓글