[TIL] day34

Hyebin·2022년 2월 27일
0

TIL

목록 보기
35/47

TIL

트랜잭션이란?

Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법

  • DDL이나 DML 중 레코드를 수정/추가/삭제한 것에만 의미가 있다.
  • SELECT 에는 트랜잭션을 사용할 이유가 없다. (-> 와이?)
  • BEGIN 과 END 혹은 BEGIN과 COMMIT 사이에 해당 SQL들을 사용한다.
  • ROLLBACK

여러개의 sql이 동시에 성공하거나 동시에 실패해야 데이터의 정확성에 문제가 없다.

atomic?  
ROLLBACK: 하나라도 실패하면 원래 상태로 돌아간다. 
//예
BEGIN;
	A계좌로부터 인출; //이 두 명령어들이 마치 하나의 명렁어처럼 처리된다.
    B계좌로 입금; // 전부 성공하던지 다 실패하던지 둘중 하나의 결과가 나온다. 
END;

autocommit=True

  • 모든 레코드의 수정/삭제/추가 작업이 기본적으로 바로 데이터베이스에 쓰여진다.
    이를 커밋된다고 한다. (git이랑 비슷한것같다..!)
  • 만일 특정 작업을 트랜잭션으로 묶고 싶다면 BEGIN과 END(COMMIT)/ROLLBACK으로 처리한다.
BEGIN/END는 바로 반영하지는 않게 하고 싶을때 사용한다.    
COMMIT은 commit sql이 실행될때까지 아무 문제가 없다면, 그때 반영한다.

autocommit=False

  • 모든 레코드 수정/삭제/추가 작업이 COMMIT이 호출될 때까지 커밋되지 않는다.

내 세션에서는 반영된것처럼 보일 수 있지만, 다른 사용자들의 세션에는 아직 반영되지 않아 보이지 않는다.

TRUNCATE
DELETE FROM 보다 속도는 빠르지만, 트랜잭션을 지원하지 않는다.
사용을하더라도 ROLLBACK이 되지 않는다.

profile
공부중입니다 :D

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN