일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩봉사
- softeer
- 파이썬
- 시나공
- 공부일지
- programmers
- 1과목
- 스프링
- MYSQL
- 소프티어
- 백준알고리즘
- python
- 프로그래머스
- 정보처리산업기사
- 회고
- 자바
- SW봉사
- 문제풀이
- 백준
- kotlin
- java
- CJ UNIT
- C++
- 코틀린
- 알고리즘
- SQL
- BFS
- 데이터베이스
- 백준 알고리즘
- 코딩교육봉사
- Today
- Total
JIE0025
[DB] 트랜잭션(Transaction) 개념, 예제 본문
트랜잭션?
데이터베이스의 상태를 변경시키기 위해 수행하는 작업의 단위
데이터베이스의 상태를 변화시킨다는 말의 의미는 SQL질의어를 이용해 데이터베이스를 접근하는 것이다.
작업의 단위는 질의어 한문장이 나이고, 사람이 정하는 기준에 따라 정해진다.
예시
게시판 글 작성 -> 작성 버튼 클릭 -> 업데이트 된 게시판 리스트를 보는 상황에서
1) 사용자가 글 작성 버튼 클릭시 insert문 사용
2) 게시판을 구성할 데이터를 Select해서 최신 정보 유지
이 상황에서 작업의 단위는 insert + select
** 관리자와 개발자가 트랜잭션 설계를 잘 하면 데이터를 다룰때 많은 이점이 있음.
트랜잭션 특징
1) 원자성 (Automicity)
트랜잭션이 데이터 베이스에 모두 반영되거나, 전혀 반영되지 않아야 함.
2) 일관성 (Consistency) :
트랜잭션 작업 처리의 결과는 항상 일관적이어야한다.
(데이터타입이 반환후 전이 항상 동일)
3) 독립성 (Isolation)
하나의 트랜잭션은 다른 트랜잭션에 간섭할 수 없다. 트랜잭션은 독립적이다.
4) 지속성 (Durability)
트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 한다.
트랜잭션 Commit, Rollback 연산
Commit : 하나의 트랜잭션이 성공적으로 끝나 DB가 일관성있는 상태에 있음을 의미
Rollback : 트랜잭션의 원자성이 깨진, (하나의 트랜잭션 처리가 비정상적으로 종료 된) 상태
- COMMIT은 DB에 영구 저장되고, 하나의 트랜잭션 과정이 종료 됨. 데이터가 완전히 반영됨
- ROLLBACK 은 작업 중 문제가 발생되어 변경사항을 취소하는 명령어인데, 명령을 트랜잭션에 넣으머ㅕㄴ, 트랜잭션이 시작되기 이전의 상태로 되돌아감. (마지막 COMMIT을 완료한 시점으로 돌아간다)
트랜잭션 예제 코드
🔽 공식 레퍼런스 제시된 코드 🔽
START TRANSACTION
[transaction_characteristic [, transaction_characteristic] ...]
transaction_characteristic: {
WITH CONSISTENT SNAPSHOT
| READ WRITE
| READ ONLY
}
BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}
✔ START TRANSACTION / BEGIN으로 시작
✔ COMMIT / ROLLBACK으로 끝남.
예제
#test tbl 생성
CREATE TABLE testtbl(
ID INT NOT NULL
);
#트랜잭션 생성1
BEGIN;
INSERT testtbl VALUE(1);
ROLLBACK;
#트랜잭션 테스트1
SELECT * FROM testtbl;
#트랜잭션 생성2
START TRANSACTION;
INSERT testtbl VALUE(1);
ROLLBACK;
#트랜잭션 테스트2
SELECT * FROM testtbl;
결과 :: 두 테스트 모두 마지막에 rollback되어 테이블에 아무런 속성이 없음.
'백엔드 > 데이터베이스' 카테고리의 다른 글
[MySQL] 데이터 확인시 1000개 제한 해제 (0) | 2023.04.08 |
---|---|
[MySQL] GROUP BY, PARTITION BY 차이점 (1) | 2022.12.05 |
[데이터 모델링] 모델링 예제 (ER다이어그램,관계 데이터 모델) (2) | 2021.06.06 |
[데이터모델링] ER 모델 , 관계 데이터 모델로 사상 (0) | 2021.06.05 |
[데이터모델링] E-R 다이어그램 - web에서 그리기 (2) | 2021.06.05 |