취미가 좋다
[6] Transaction 본문
1. 트랜잭션
DBMS 에서 데이터를 다루는 논리적인 작업의 단위
연산(쿼리)을 묶어서 진행하고 싶을 때 사용
1.1 Commit
모든 작업을 정상적으로 처리하겠다고 확정하는 명령어
COMMIT 수행하면, 하나의 트랜잭션 과정을 종료
1.2 Rollback
작업 중 문제가 발생했으니, 되돌리자는 명령어
트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
즉, 이전 COMMIT한 곳까지만 복구한다.
2. 트랜잭션 성질 ACID
2.1 원자성 (Atomicity)
트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것을 의미
All or Nothing
2.2 일관성 (Consistency)
트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
데이터가 우리가 원하는 정의에 일치해야 한다는 것
예를 들어 배민에서의 일관성은 "사람들이 주문하는 양이 내 재고의 양을 넘지 않았으면 좋겠다" 이다.
2.3 격리성 (Isolation)
둘 이상의 트랜잭션이 동시에 실행되려고 할 때, 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점
하나의 특정 트랜잭션이 완료될때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
격리 수준 (Isolation level) : 격리성을 조절
2.4 지속성 (Durability)
트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다는 속성
성공적으로 커밋됐다면 하드웨어 결함이 발생하거나 디비가 죽더라도 트랜잭션에서 기록한 모든 데이터는 손실되지 않는다.
하드디스크나 SSD 같은 비휘발성 저장소에 기록되었다는 걸 의미
3. 트랜잭션 실습
3.1 START TRANSACTION;
이 명령어 다음부터 COMMIT 이 나오기 전까지는 한 작업 단위로 인식하겠다는 의미
3.2 COMMIT;
모든 코드를 정상적으로 처리하겠다고 확정하는 명령어
3.3 ROLLBACK;
START TRANSACTION 실행 전 DB 상태로 되돌린다.
ROLLBACK 을 입력하지 않더라도 트랜잭션 중 에러가 발생해도 되돌린다.
트랜잭션 과정을 종료시키는 명령어
3.4 실습 코드
mySQL 에서는 autocommit 이라는 설정이 되어 있어서, 모든 SQL 명령어를 자동으로 Commit 한다.
SET AUTOCOMMIT=0;
SET AUTOCOMMIT=0;
START TRANSACTION;
SELECT * FROM student;
UPDATE student SET name = "서빈2" WHERE id = 8;
DELETE FROM student where id = 9;
SELECT * FROM student;
ROLLBACK;
'Sparta Coding Club > Database & SQL' 카테고리의 다른 글
[5] Select 확장 (0) | 2021.08.11 |
---|---|
[4] DB 연관 관계 (0) | 2021.08.11 |
[3] DB CRUD (0) | 2021.08.11 |
[2] Database 기초 & 용어 (0) | 2021.08.11 |
[1] Database 개념 & 종류 (0) | 2021.08.11 |