딩관
오늘의 가치
딩관
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • Kotlin (3)
      • 스프링 (2)
      • 기본문법 (1)
    • Python (75)
      • 기초문법 (43)
      • Python 모듈 (2)
      • Python 문제 (8)
      • Django (21)
      • DRF (1)
    • JavaScript (14)
      • JavaScript (4)
      • Typescript (0)
      • Node.js (4)
      • nest.js (2)
      • express (4)
    • SQL (12)
    • 기초CS (24)
      • 알고리즘 (16)
      • HTTP (4)
      • OperationSystem (2)
      • Linux (1)
    • 프로젝트 (8)
      • fake-trip (3)
      • 위코드 (5)
    • 잡동사니 (12)
    • Git (4)
      • git (1)
      • Git-hub (3)
    • 개발자 정진관 (12)
      • 개발자 이야기 (5)
      • 처음은 누구나 힘들다. (4)
      • 넌 이것도 이해 못하니? (3)
    • JAVA (5)
      • spring (2)
    • HTML & CSS (5)
    • Docker (1)
    • k8s (0)
      • k8s (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 장고
  • 백엔드
  • python
  • 알고리즘
  • Database
  • 개발자
  • java
  • Django
  • 위코드
  • wecode
  • TypeScript
  • 자료구조
  • http
  • Node.js
  • JavaScript
  • Data Structure
  • SQL
  • MYSQL
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
딩관

오늘의 가치

[Database] 트랜잭션(Transaction) 과 ACID
SQL

[Database] 트랜잭션(Transaction) 과 ACID

2022. 9. 14. 16:44

트랜잭션이란?

하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합, 작업단위

트랜잭션의 4가지 특징 ACID

  • 원자성(Atomicity)
    -  트랜잭션은 DB에 모두 반영되거나, 전혀 반영되지 않아야 합니다.
    - Commit & Rollback을 활용합니다.
  • 일관성(Consistency)
    - 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 합니다.
    - 허용된방식으로만 데이터를 변경하는것을 의미합니다.
    - 데이터베이스에 기록된 모든 조건, 제약들을 적용하며 수행하는것을 의미합니다.
  • 독립성(Isolation)
    - 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을때, 어떤 트랜잭션도 다른 태랜잭션 연산에 끼어들 수 없습니다.
  • 지속성(Durability
    - 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다.
    -시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미합니다.
    - 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있습니다.
    - 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있습니다.

Commit & Rollback

  • Commit
    - 하나의 트랜잭션이 성공적으로 끝났고, DB과 일관성있는 상태일 때 이를 알려주기 위해 사용하는 연산
  • Rollback
    - 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션 원자성이 깨진경우 transaction이 정상적으로 종료되지 않았을 때
       원상태로 되돌리기위해 하는 연산

단일 명령에서의 트랜잭션 처리

mysql 에서는 기본적으로 단일 명령에도 auto-Commit이 걸려있습니다.

단일 쿼리문도 자동으로 커밋이 되는것을 의미합니다.

확인명령어

SELECT @@AUTOCOMMIT;

트랜잭션 사용해보기

1.START TRANSACTION 

START TRANSACTION;

2.필요한 쿼리문 사용

INSERT INTO user(name,password) values("aa", "123123!")
INSERT INTO user(name,password) values("bb", "123123!")

3.COMMIT or ROLLBACK

# 성공적으로 수행한 경우
COMMIT;

# 롤백이 필요한경우
ROLLBACK;
  • COMMIT을 할 경우 두 개의 쿼리문이 수행되며
  • ROLLBACK을 할 경우 아무것도 수행되지 않는다.

'SQL' 카테고리의 다른 글

[Database] 트랜잭션 격리수준(Transaction Isolation Level)  (0) 2022.10.28
[Database]MySQL 인덱스  (0) 2022.10.07
[SQL] 데이터베이스 정규화 (1nf,2nf,3nf,bcnf)  (0) 2022.08.02
이게 바로 개막장 ERD다.  (0) 2022.06.01
JOIN - 테이블을 합치게 해준다  (0) 2022.05.12
    'SQL' 카테고리의 다른 글
    • [Database] 트랜잭션 격리수준(Transaction Isolation Level)
    • [Database]MySQL 인덱스
    • [SQL] 데이터베이스 정규화 (1nf,2nf,3nf,bcnf)
    • 이게 바로 개막장 ERD다.
    딩관
    딩관

    티스토리툴바