일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c#
- django
- Serial
- MX Component
- tensorflow
- rs485
- 크롤링
- pymssql
- 윈도우10
- 딥러닝
- rs422
- Visual Studio Code
- vscode
- MSSQL PYTHON
- Python
- windows10
- PYTHON MSSQL
- MEAN Stack
- 오라클
- oracle
- 장고
- scrapy
- MSSQL
- matplot
- 텐서플로우
- sql developer
- 티스토리 초대장
- 자본주의
- M2M
- 파이썬
Archives
- Today
- Total
안까먹을라고 쓰는 블로그
[MSSQL] 트랜잭션(Transaction) 본문
반응형
트랜잭션(Transaction) 이란?
트랜잭션은 작업의 한 단위입니다.
트랜잭션이 성공하면 트랜잭션 동안 이루어진 모든 데이터 수정은 커밋되고, 데이터베이스의 영구적인 부분이 됩니다.
트랜잭션에 오류가 발생하여 취소되거나 롤백되면, 모든 데이터 수정은 지워집니다.
MSSQL의 트랜잭션 모드
- 자동 커밋 트랜잭션
개별적으로 실행하는 쿼리가 해당됩니다. - 명시적 트랜잭션 (일반적으로 생각하는 트랜잭션)
각 트랜잭션이 BEGIN TRANSACTION 문으로 명시적으로 시작하여, COMMIT 또는 ROLLBACK문으로
명시적으로 완료 됩니다. - 암시적 트랜잭션
새 트랜잭션은 이전 트랜잭션이 완료되면, 암시적으로 시작되지만, 각 트랜잭션은 COMMIT 또는 ROLLBACK문으로
명시적으로 완됴 됩니다. - 일괄 처리 범위의 트랜잭션
MARS(Multiple Active Result Sets)에만 해당되며, MARS 세션에서 시작되는 Transact-SQL 명시적 또는
암시적 트랜잭션이 일괄 처리 범위 트랜잭션이 됩니다. 일괄처리가 완료될 때 커밋되거나 롤백되지 않은
일괄 처리 범위의 트랜잭션은 SQL Server 에서 자동으로 롤백합니다.
MSSQL은 다음과 같은 트랜잭션 문을 제공합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
-- 결과 값 조회(Transaction 전)
SELECT '결과 값 조회(Transaction 전)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- Transaction 시작
BEGIN TRAN
-- 업데이트문 실행(Transaction 안)
UPDATE [NEOE].[ORDER] SET QT_ORDER = 222 WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- 결과 값 조회(Transaction 안)
SELECT '결과 값 조회(Transaction 안)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- Transaction COMMIT
COMMIT TRAN
-- 결과 값 조회(COMMIT 후)
SELECT '결과 값 조회(COMMIT 후)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
|
cs |
※ 좀더 자세한 설명을 원하시면, 하단의 MS공식사이트를 참고하시기 바랍니다.
https://learn.microsoft.com/ko-kr/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-ver16
TRANSACTION 쿼리 예
1. MSSQL - 기본적인 TRANSACTION 쿼리 (COMMIT)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -- 결과 값 조회(Transaction 전) SELECT '결과 값 조회(Transaction 전)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3' -- Transaction 시작 BEGIN TRAN -- 업데이트문 실행(Transaction 안) UPDATE [NEOE].[ORDER] SET QT_ORDER = 222 WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3' -- 결과 값 조회(Transaction 안) SELECT '결과 값 조회(Transaction 안)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3' -- Transaction ROLLBACK ROLLBACK TRAN -- 결과 값 조회(ROLLBACK 후) SELECT '결과 값 조회(ROLLBACK 후)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3' | cs |
2. MSSQL - 기본적인 TRANSACTION 쿼리 (ROLLBACK)
-- 결과 값 조회(Transaction 전)
SELECT '결과 값 조회(Transaction 전)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- Transaction 시작
BEGIN TRAN
-- 업데이트문 실행(Transaction 안)
UPDATE [NEOE].[ORDER] SET QT_ORDER = 222 WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- 결과 값 조회(Transaction 안)
SELECT '결과 값 조회(Transaction 안)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
-- Transaction ROLLBACK
ROLLBACK TRAN
-- 결과 값 조회(ROLLBACK 후)
SELECT '결과 값 조회(ROLLBACK 후)', * FROM [NEOE].[ORDER] WHERE DT_ORDER = '20230903' AND CD_ITEM = 'item3'
예외처리
"GOTO ERROR" 를 호출하면 하단의 "ERROR:" 로 이동하여, "ROLLBACK TRAN"을 실행하며,
일반적인 경우, "COMMIT TRAN" 실행 후, "RETURN"으로 "ERROR:" 전에 빠져 나간다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- Transaction 시작 BEGIN TRAN -- Transaction 안에서 처리작업 진행 -- 뭔가 예외사항이나 문제 발생 시,, IF @@ERROR <> 0 GOTO ERROR COMMIT TRAN RETURN ERROR: ROLLBACK TRAN SET @V_ERRMSG = '오류메시지.' RAISERROR (@V_ERRMSG, 18,1) | cs |
끝
반응형
'DataBase > MS SQL' 카테고리의 다른 글
[MSSQL[ 계층형쿼리,재귀쿼리,트리쿼리 (Feat. with CTE) (0) | 2023.11.15 |
---|---|
[MSSQL] 예외처리 (TRY, CATCH) (0) | 2023.10.13 |
[MSSQL] 순차 합계구하기 (Feat. OVER, PARTITION BY) (0) | 2023.09.22 |
[MSSQL] 집계함수 (GROUP BY, ROLLUP, CUBE, GROUPING SETS) (0) | 2023.09.21 |
[MSSQL] 오래걸리는 쿼리내역 조회 (0) | 2023.05.03 |
Comments