[MSSQL SEVER 기본에서 실무까지] Transaction 및 LOCK 관리 3-12~13

2021. 12. 17. 14:36개발/MSSQL

  1. TRANSACTION 이란?
    • 트랜잭션은 "하나의 논리적 작업 단위로 수행되는 일련의 작업"
    • "일련의 작업이 전부 수행되거나 혹은 전부 되지 않거나"
  2. 사용법
    • BEGIN TRAN 으로 수행
    • COMMIT 으로 결과 반영
    • ROLLBACK 으로 수행 취소
  • CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DECLARE @INT_실패여부 INT
 
SET @INT_실패여부 = 0
 
BEGIN TRAN
 
-- Update 후 에러 및 처리건수를 체크하여 문제가 있으면 1 리턴
UPDATE A SET
       A.수량 = 15
  FROM T매출 A
 WHERE A.일자 = '20200101'
   AND A.제품 = 'A1'
 
IF @@ERROR <> 0 OR @@ROWCOUNT <> 1 SET @INT_실패여부 = 1
 
-- DELETE 후 에러 및 처리건수를 체크하여 문제가 있으면 1 리턴
DELETE A
  FROM T매출 A
 WHERE A.일자 = '20200105'
   AND A.제품 = 'A5'
 
IF @@ERROR <> 0 OR @@ROWCOUNT <> 1 SET @INT_실패여부 = 1
 
-- 실패여부 변수에 따라 COMMIT 또는 ROLLBACK 처리 함
SELECT A.* , [ERRER] = @@ERROR, [ROWCOUNT] = @@ROWCOUNT
  FROM T매출 A
 
IF @INT_실패여부 = 0 BEGIN
    COMMIT TRAN
END ELSE BEGIN
    ROLLBACK
END
 
SELECT A.* , [ERRER] = @@ERROR, [ROWCOUNT] = @@ROWCOUNT
  FROM T매출 A
 
 
 
cs

 

결과

 

 

  1. DBMS에서 LOCK(잠금)이란?
    • DBMS에서는 여러 사용자가 동시에 같은 데이터를 조회 / 수정 작업이 가능하기 때문에 신뢰성에 문제가 생길수 있는데 이를 방지하기 위한 기능
  2. 트랜잭션을 이용하여 LOCK 개념 확인
    • EX)BEGIN TRAN을 사용하여 A TABLE에 LOCK 잠금 활성
    • 세션이 다른 사용자가 A TABLE에 접근할 수 없음
    • 각 트랜젹션의 격리 수준은 9장에서 상세히 다룸