데이터베이스는 전자적으로 저장되는 구조화된 정보 또는 데이터의 조직화된 모음
데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 관리 및 제어가 됨.
보통은 DBMS와 데이터베이스 등을 한대로 묶어 데이터베이스 시스템이라고 하며 단축해서 데이터베이스라고 함.
데이터베이스의 상태를 변화시키는 하나의 작업 단위를 의미한다.
작업의 단위는 딱 한개의 일이 아니라 일련의 행위들을 한데 묶은 것이다.
아래는 하나의 작업이다.
이와 같은 전체 행동을 합친 것이 하나의 작업이다.
하나의 트랜잭션은 모든 것이 정상적으로 처리되어 Commit이 되거나 비정상적으로 처리되어 모든게 취소가 되는 Rollback 두 개의 행동이 있다.
원자성, 일관성, 독립성, 지속성
트랜잭션의 성질은 크게 4가지로 원자성, 일관성, 독립성, 지속성이 있다.
여러 트랜잭션들이 동시에 처리 될 때 트랜잭션끼리 얼마나 독립성을 가지고 있는지 나타내는 것
크게 4개의 Isolation Level로 나뉨
Isolation Level 은 동시성과 데이터 무결성 사이에서의 조율이라 조심할 필요가 있다. 일반적으로 Serializable이 제일 고립정도가 높고 성능이 떨어진다.
Read Uncommitted 격리 수준에서는 다른 트랜잭션에서 Commit 이전에 처리 중인 변경된 데이터도 확인 할 수 있다.
해당 레벨에서는 Dirty Read가 발생 할 수 있다.
이렇듯 데이터 무결성이 어긋나는 경우가 발생함
Commit이 완료된 트랜잭션만 조회활 수 있다. 트랜잭션이 수행되는 동안에 다른 트랜잭션은 접근 할 수 없어 대기하고 있다.
SQL Server, Oracle DB등에서 기본적으로 사용하는 격리수준이다.
Non-Repeatable Read(조회를 할 때마다 값이 변경될 수 있다)가 발생하는 레벨이다.
트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있는 격리 수준이다. MySQL에서 기본으로 사용하는 격리 수준이다. 해당 격리 수준에서는 Non-Repeatable READ가 발생하지 않는다.
해당 격리 수준은 자신의 트랜잭션보다 낮은 트랜잭션 번호에서 변경된 것 만 보게 된다.
다만 해당 격리까지는 트랜잭션 도중에 Insert가 되기 때문에 Phantom Read는 계속 존재한다.
가장 단순하고 가장 엄격한 격리 수준으로써 한 트랙잭션이 처리 될 때 영향이 있는 레코드에는 다른 트랜잭션들이 일체 접근을 할 수가 없다.
그렇기 때문에 다른 격리들 보다 동시처리 능력이 떨어지고 성능저하가 발생한다.