데이터를 우리가 직접 INSERT, UPDATE, DELETE 를 처리할 때가 있는데, MS-SQL 은 대부분은 AUTO COMMIT 을 설정해서 사용한다. 이에 우리가 직접 쿼리를 이용하여 데이터를 처리할 때 잘못처리하면 되돌리기 힘든 상황이 발생할 수 있는데, 이럴 때 BEGIN TRAN 을 이용하면 큰 실수를 방지할 수 있다.
Create Temp Table & Create Data
CREATE TABLE #tmp_data
(
cust_id int,
cust_name varchar(10),
kr_lang int,
math int
)
INSERT INTO #tmp_data VALUES (1,'홍길동',85,90)
INSERT INTO #tmp_data VALUES (2,'이순신',100,95)
INSERT INTO #tmp_data VALUES (3,'카네기',25,80)
INSERT INTO #tmp_data VALUES (4,'임꺽정',55,40)
INSERT INTO #tmp_data VALUES (5,'김진구',85,85)
INSERT INTO #tmp_data VALUES (6,'한나나',90,75)
INSERT INTO #tmp_data VALUES (7,'강구구',60,100)
SELECT * FROM #tmp_data
COMMIT 이란?
COMMIT 은 INSERT, UPDATE, DELETE문으로 변경한 데이터를 데이터베이스 반영한다.
COMMIT 이 실행될 때 하나의 트랜잭션 과정을 종료하며, 데이터베이스 변경으로 인한 LOCK 이 해제된다.
ROLLBACK 이란?
ROLLBACK 을 실행하면 INSERT, UPDATE, DELETE 문의 작업을 모두 취소한다. 단, 이전에 COMMIT 한 곳까지만 복구한다.
ROLLBACK이 실행되면 데이터 변경 사용을 모두 취소하고, 트랜잭션을 종료하며, 데이터베이스 변경으로 인한 LOCK 이 해제된다.
BEGIN TRAN
- 트랜잭션 시작위치로 설정하여, INSERT, UPDATE, DELETE 문을 실행 후, COMMIT/ROLLBACK 을 통해서 트랜잭션을 종료할 수 있도록 한다.
- COMMIT/ROLLBACK 을 처리하지 않을 경우, LOCK 상태가 지속된다.
- DROP, TRUNCATE 는 BEGIN TRAN으로 ROLLBACK 처리가 되지 않는다.
BEGIN TRAN
UPDATE #tmp_data
SET kr_lang = 100
WHERE cust_id = 1
SELECT * FROM #tmp_data
우선, 실무용 데이터베이스에서는 사용중인 테이블에 위와 같이 BEGIN TRAN 처리를 하고 바로 SELECT 처리를 하면 교착상태에 빠져 조회되지 않을 수 있다. 그럴 때에 FROM #tmp_data WITH(NoLock) 으로 조회하면 조회가 가능하다.
하지만 LOCK 상태이기 때문에 빠른 COMMIT/ROLLBACK 처리가 되지 않으면 사용 상의 문제가 발생할 수 있으니 주의하여 사용하도록 하자.
BEGIN TRAN
UPDATE #tmp_data
SET kr_lang = 100
WHERE cust_id = 1
ROLLBACK
SELECT * FROM #tmp_data
'데이터베이스[DB] > MSSQL' 카테고리의 다른 글
[MS-SQL] DELETE, DROP, TRUNCATE (0) | 2025.04.06 |
---|---|
[MS-SQL] LEFT,RIGHT,SUBSTRING, LEN - 문자열함수 (0) | 2025.03.25 |
[MS-SQL] DATEPART, DATENAME - 일자(요일,주차,분기) 함수 (0) | 2025.03.21 |
[MS-SQL] UNION, UNION ALL (0) | 2025.03.18 |
[MS-SQL] 테이블별 용량확인 (0) | 2025.01.18 |
[MS-SQL] TOP, WITH TIES, ROW_NUMBER (0) | 2025.01.17 |
[MS-SQL] IIF, CASE ( DECODE, CASE ) 조건문 (0) | 2025.01.15 |
[MS-SQL] 테이블생성, 컬럼생성, 컬럼수정, 컬럼삭제, 테이블명변경 ( Create table, Alter table, Modify, Rename ) (0) | 2025.01.14 |