Backend/SQL

SQL 기본 및 활용 (3) - 트랜잭션

rachel_13 2022. 11. 5. 00:39

Transaction(트랜잭션)

: 데이터베이스의 논리적 연산단위. 분리될 수 없는 한 개 이상의 데이터베이스

  • ALL | Nothing 의 개념
  • 하나 이상의 SQL문이 포함된다.

 

[개요]

- 트랜잭션 : 세부적인 연산들의 집합 -> 대상 DML (UPDATE, INSERT, DELETE)

- 커밋 : 반영된 데이터를 데이터베이스에 반영시킴

- 롤백 : 트랜잭션 시작 이전의 상태로 되돌리기

 

특성 설명
원자성 트랜잭션에서 정의된 연산들은 모두 실행되거나 실행되지 않아야 한다. (All or Nothing)
일관성 트랜잭션 실행 이전에 무언가 잘못되어 있지 않았었다면, 실행 후에도 잘못되어 있지 않아야 한다.
고립성 트랜잭션 실행 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 안된다.
지속성 트랜잭션 성공적으로 수행시 그 트랜잭션이 갱신한 데이터베이스들은 영구히 저장된다.

 

1. COMMIT

UPDATE PLAYER SET HEIGHT = 100;
COMMIT;

INSERT INTO PLYAER (PLAYER_ID, TEAM_ID< PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO) VALUES ('1997035', 'K02', '이윤재', 'GK', 182, 82, 1);
COMMIT;

* 커밋 이후 프로세스

[데이터 변경 사항이 데이터베이스에 반영] - [이전 데이터 소실] - [모든 사용자가 결과를 볼 수 있음] - [락킹(LOCKING) 풀리고, 다른 사용자가 행을 조작할 수 있게 됨]

* SQL Server는 기본 옵션이 AUTO COMMIT 이다. 따라서 사용자가 COMMIT 이나 ROLLBACK을 해 줄 필요가 없다.

 

2. ROLLBACK

테이블 내 입력, 수정, 삭제한 데이터에 대하여 COMMIT 하기 전에 변경사항을 취소할 수 있다.

ROLLBACK;

* 롤백 이후 프로세스

[데이터 변경사항 취소] - [이전 데이터 재저장] - [관련된 행 잠금(LOCKING) 해제] - [다른 사용자가 행을 조작할 수 있게 됨]]

 

→ COMMIT, ROLLBACK을 사용함으로써

"데이터 무결성 보장", 데이터의 변경 사항을 확인할 수 있다.  논리적으로 연관된 작업 그룹핑 가능하다.

 

3. SAVEPOINT (저장점)

저장점이 있으면 롤백시 저장점까지만 롤백을 할 수 가 있다. (트랜잭션 일부만 롤백)

(Oracle)
SAVEPOINT SVPT1;
ROLLBACK TO SVPT1;

(SQL Server)
SAVE TRANSACTION SVPT1;
ROLLBACK TRANSACTION SVPT1;

ex) 새로운 트랜잭션을 시작하기 전에, PLAYER 테이블의 데이터 건수와 몸수게가 100인 선수의 데이터 건수를 확인한다.

SELECT COUNT (*) FROM PLAYER;
COUNT(*);

SAVEPOINT SVPT1;

SELECT COUNT(*) FROM PLAYER WHERE WEIGHT = 100;
COUNT(*);

SAVEPOINT SVPT2;

ROLLBACK TO SVPT1;

 

'Backend > SQL' 카테고리의 다른 글

SQL - GROUP BY, HAVING 절  (0) 2022.11.05
SQL 기본 및 활용 (4) - WHERE 절  (0) 2022.11.05
SQL 기본 및 활용 (2) - DML  (0) 2022.11.04
SQL 기본 및 활용 (1) - DDL  (0) 2022.11.04