-
MySQL Begin 과 Start TransactionDataBase/MySQL 2022. 12. 16. 19:32
- START TRANSACTION 과 BEGIN 은 모두 새로운 트랜잭션을 만듭니다.
- COMMIT 은 현재 트랜잭션을 commit 한다는 의미로, 해당 트랜잭션을 영구적으로 반영되게 합니다.
- ROLLBACK 은 현재 트랜잭션을 다시 되돌린다는 의미로, 현재 트랜잭션의 변화를 취소한다는 의미입니다.
- SET autocommit 은 현재 세션에 대해 자동 반영을 비활성화 시키거나 활성화 시킵니다.
기본값으로 autocommit 은 활성화 되어 있습니다. 즉, 모든 SQL 구문은 START TRANSACTION , COMMIT 에 둘러 쌓인 것처럼 모든 구문은 원자성을 가지고 있습니다. autocommit 이 켜져있는 상태에서는 ROLLBACK 은 아무런 효과가 없습니다. 단, SQL 구문이 실행 중 문제가 있다면 해당 구문은 자동으로 롤백됩니다.
autocommit 을 비활성화 하고 싶으면 START TRANSACTION 을 사용하면 됩니다.
START TRANSACTION 을 사용하면 COMMIT 이나 ROLLBACK 으로 트랜잭션을 종료시키기 전까지 autocommit 은 비활성화 됩니다.
START TRANSACTION 을 사용해서 autocommit 을 비활성화 시키는 것을 암묵적(implicit) 으로 비활성화 한다고 표현합니다. autocommit 을 명시적(explicit) 으로 비활성화 하고 싶으면 다음과 같이 SQL 쿼리를 입력하면 됩니다.
SET autocommit = 0;
autocommit 을 비활성화(0 으로 설정) 하면 transaction-safe 테이블(InnoDB 또는 NDB) 은 쿼리를 즉시반영하지 않습니다. 이를 반영하기 위해서 COMMIT 을 사용해야 하고 반영하지 않기 위해선 ROLLBACK 을 하면 됩니다.
autocommit 은 세션 변수이고 연결된 세션마다 설정되어 있습니다. 즉 세션별로 다르게 설정할 수 있습니다.
BEGIN 및 BEGIN WORK는 트랜잭션 시작을 위한 START TRANSACTION의 별칭으로 지원됩니다. START TRANSACTION은 표준 SQL 구문이며 임시 트랜잭션을 시작하는 데 권장되는 방법이며 BEGIN이 허용하지 않는 수정자를 허용합니다.
'DataBase > MySQL' 카테고리의 다른 글
B-Tree 와 B+Tree 의 차이점 (0) 2022.08.02 체인지 버퍼 (0) 2022.08.02 MySQL 변수 종류 (0) 2022.04.27 MySQL 사용자 변수 (0) 2022.04.25