[MSSQL SEVER 기본에서 실무까지] Transaction 및 LOCK 관리 3-12~13
2021. 12. 17. 14:36ㆍ개발/MSSQL
- TRANSACTION 이란?
- 트랜잭션은 "하나의 논리적 작업 단위로 수행되는 일련의 작업"
- "일련의 작업이 전부 수행되거나 혹은 전부 되지 않거나"
- 사용법
- 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 |
- DBMS에서 LOCK(잠금)이란?
- DBMS에서는 여러 사용자가 동시에 같은 데이터를 조회 / 수정 작업이 가능하기 때문에 신뢰성에 문제가 생길수 있는데 이를 방지하기 위한 기능
- 트랜잭션을 이용하여 LOCK 개념 확인
- EX)BEGIN TRAN을 사용하여 A TABLE에 LOCK 잠금 활성
- 세션이 다른 사용자가 A TABLE에 접근할 수 없음
- 각 트랜젹션의 격리 수준은 9장에서 상세히 다룸
'개발 > MSSQL' 카테고리의 다른 글
[MSSQL SERVER 기본에서 실무까지] 오류 및 처리건수 시스템변수 3-11 (0) | 2021.12.20 |
---|---|
MSSQL 명령어 정리 (0) | 2021.12.17 |
[MSSQL SERVER 기본에서 실무까지] 외래키 (Foreign Key) 3-14 (0) | 2021.12.17 |
[MSSQL SERVER 기본에서 실무까지] 3-15 (0) | 2021.12.17 |
[MSSQL SERVER 기본에서 실무까지] 임시테이블 3-16 (0) | 2021.12.17 |