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