본문 바로가기
두고두고 볼 것

트렌젝션

by 문자메일 2022. 7. 2.

https://zzang9ha.tistory.com/381

 

[MySQL] - 트랜잭션의 격리 수준(Isolation level)

📎 글또 6기 포스팅 1. 미치도록 더웠던 7월의 회고 2. 사용자가 게시물을 작성할 때의 트랜잭션 처리 3. Spring AOP - (1) 프록시 패턴, 데코레이터 패턴 4. [MySQL] - 트랜잭션의 격리 수준(Isolati

zzang9ha.tistory.com

 

https://kkamikoon.tistory.com/entry/MySQL-DDL-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95CREATE-DROP-ALTER-RENAME-TRUNCATE

 

[MySQL] DDL 명령어 사용하는 방법(CREATE, DROP, ALTER, RENAME, TRUNCATE)

MySQL 명령어는 웹 프로그래밍 하면서 나름 익혔지만, 생각보다 익혀지지 않아서 가끔 헷갈릴 때가 있습니다. 이번 포스트에서는 MySQL 기본 명령어에 대해 알아보도록 합니다. 명령어는 DDL 명령어

kkamikoon.tistory.com

 

 

 

원자성 : 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 실패해야 한다.

일관성 : 모든 트랜잭션은 일관성있는 데이터베이스 상태를 유지해야 한다.

격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 동시에 같은 데이터를 수정하지 못하도록 한다. 격리성은 성능 이슈로 트랜잭션 격리 수준을 선택할 수 있다.

지속성 : 트랜잭션을 성공적으로 끝내면 그 결과는 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.

 

 

트랜잭션 격리 수준 - Isolation level

READ UNCOMMITED - 커밋되지 않은 읽기

READ COMMITED - 커밋된 읽기

REPEATABLE  READ - 반복 가능한 읽기

SERIALIZABLE - 직렬화 가능

 

 

현재 트랜잭션의 격리 수준 확인 명령어

SHOW VARIABLES LIKE 'tx_isolation';

트랜잭션 AUTOCOMMIT 설정 확인

SHOW VARIABLES LIKE 'autocommit';

AUTOCOMMIT값 FALSE로 변경 (default는 TRUE 임)

SET AUTOCOMMIT = FALSE;

 

 

 

트랜잭션 격리성 테스트용 테이블 생성

create table TX_TEST(no INT, name VARCHAR(20));

 

 

 

READ UNCOMMITTED 테스트

1) 먼저 두 개의 Session을 준비하고 격리 수준을 모두 'READ UNCOMMITTED'로 수정합니다.

// 트랜잭션 격리 수준 조회
show variables like 'tx_isolation';

// 트랜잭션 격리 수준 수정
set tx_isolation = 'READ-UNCOMMITTED'

 

2) 하나의 Session에서 트랜잭션을 시작(BEGIN)하고 INSERT를 실행합니다.

BEGIN;

INSERT INTO TX_TEST VALUES(10,"READ-UNCOMMIT");

 

3) 다른 Session에서 데이터를 SELECT 하여 확인 가능한지 확인한다. 

SELECT * FROM TX_TEST;

 

4) INSERT했던 Session에서 ROLLBACK을 수행합니다.

ROLLBACK;

 

5) 다른 Session에서 다시 데이터를 SELECT 합니다.

SELECT * FROM TX_TEST;

READ-UNCOMMIT 격리성 설정에서는 트랜잭션에서 처리된 작업(Commit)이 완료되지 않아도 다른 트랜잭션에서 볼 수 있는 Dirty Read 현상이 일어난다.여러 문재점이 있어서 거의 사용하지 않는 격리성 래밸 설정이다.

 

'두고두고 볼 것' 카테고리의 다른 글

일급 콜렉션  (0) 2022.09.22
객체지향  (0) 2022.09.20
JPA 변경 감지와 병합(merge)  (0) 2022.04.03
Java Collections, Iterator, Enumeration 인터페이스 간략 정리  (0) 2022.03.31
enum  (0) 2022.03.21

댓글