일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- vscode
- 딥러닝
- 티스토리 초대장
- 자본주의
- Python
- MEAN Stack
- PYTHON MSSQL
- 장고
- MSSQL PYTHON
- rs422
- sql developer
- MSSQL
- Serial
- scrapy
- M2M
- c#
- MX Component
- django
- 오라클
- 텐서플로우
- matplot
- Visual Studio Code
- pymssql
- tensorflow
- 크롤링
- 윈도우10
- rs485
- windows10
- 파이썬
- oracle
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