MySQL - Transaction Isolation Levels

임쿠쿠·2021년 8월 4일
0

MySQL

목록 보기
1/7
post-thumbnail

1. MySQL 기본 SQL문

(1) 테이블 생성

CREATE TABLE PRODUCTS_1 (
PRODUCT_ID int NOT NULL AUTO_INCREMENT,
PRODUCT_NAME varchar(200) NOT NULL,
PRODUCT_TYPE varchar(45) NOT NULL,
PRICE decimal(10,2) NOT NULL,
QUANTITY int NOT NULL default 0,
PRIMARY KEY (PRODUCT_ID),
UNIQUE KEY PRODUCT_NAME_UNIQUE (PRODUCT_NAME)
) ENGINE=InnoDB;

(2) 테이블 세부 정보

desc store.products_1

(3) 테이블 데이터 삽입

INSERT INTO `STORE`.`PRODUCTS_1`
(`PRODUCT_NAME`,
`PRODUCT_TYPE`,
`PRICE`,
`QUANTITY`)
VALUES
('아이폰','mobile',999,10);

(4) 테이블 데이터 업데이트

UPDATE PRODUCTS_1 
SET 
    quantity = 200
    // quantity = quantity + 50
WHERE
    product_id = 1;
    // product_id in (1,2);

(5) 테이블 데이터 업데이트

UPDATE PRODUCTS_1 
SET 
    quantity = 200
    // quantity = quantity + 50
WHERE
    product_id = 1;
    // product_id in (1,2);

(6) 테이블 데이터 삭제

DELETE FROM PRODUCTS_1 
WHERE PRODUCT_ID = 3;

2. Transaction Isolation Levels

다수의 세션이 같은 데이터에 수정 or 접근 시 lock 적용

(1) autocommit OFF & start transaction

  • commit 명령을 내리기 전까지 변경 사항 반영 x

  • commit 후 트랜잭션 반영

(2) READ-COMMITTED 설정

  • 좌측 업데이트 내역 commit 후에 우측 세션에서 해당 사항을 조회 가능

(3) READ-UNCOMMITTED 설정

  • 좌측 업데이트 내역이 commit 안됐지만 우측 세션에서 해당 내역 조회 가능 ~ DIRTY READ

(4) REPEATABLE READ 설정

  • 좌측 세션 업데이트 내역 commit해도 우측 세션에서는 해당 사항이 반영되지 않는다.
  • 하나의 트랜잭션 내에서 똑같은 조회 쿼리를 실행 시 같은 결과를 가져야 한다.

(5) SERIALIZABLE 설정

  • 다른 세션에서 트랜잭션(조회, 수정)을 진행중이면 다른 트랜잭션에서는 절대 접근 할 수 없다.
profile
Pay it forward

0개의 댓글