데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위.
즉 여러 개의 쿼리를 묶는 단위.
트랜잭션과 관련된 일이 모두 수행 되거나 되지 않았음을 보장.
문제가 발생하여 롤백하는 경우 해당 트랜잭션의 모든 작업이 수행되지 않음 ex) 은행 돈 이체.
무결성 보장
- Commit: 여러 쿼리가 성공적으로 처리됨을 확정.
- update, insert, delete 등의 쿼리가 트랜잭션 단위로 수행되고 영구 저장.
- Rollback: 에러나 이슈 때문에 트랜잭션 전으로 되돌림.
허용된 방식으로만 데이터를 변경해야 하는 것.
데이터베이스의 모든 데이터는 조건, 규칙 등에 따라 유효해야 한다.
트랜잭션 수행 시 서로 끼어들지 못해야 하는 것.
병렬 트랜잭션이라도 격리되어 순차적으로 실행되듯 작동해야 한다.
격리 수준
Serializable - Repeatable_read - Read_committed - Read_uncommitted
오른쪽 갈수록 동시성 강하며 격리성 약해짐
Serializable: 트랜잭션 순차적 진행. 교착 상태 확률 높고 성능 떨어짐.
Repeatable_read: 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정 불가 (새 행 추가는 가능).
Read_committed: 가장 많이 사용. 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없음 (커밋 완료 데이터만 조회). 한 트랜잭션이 수정한 행을 다른 트랜잭션이 수정 가능.
Read_uncommitted: 한 트랜잭션 커밋 이전에 다른 트랜잭션에 노출되나 빠름.
격리 수준에 따라 발생하는 현상
팬텀 리드: 한 트랜잭션 내에서 동일한 쿼리를 보낼 때 결과가 다른 경우.
반복가능하지 않은 조회: 한 트랜잭션 내의 같은 행에 반복 조회가 발생했는데 그 값들이 다른 것.
더티 리드: 한 트랜잭션이 실행 중에 다른 트랜잭션에 의해 수정되었지만 커밋되지 않은 이전 데이터를 읽는 것.
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함.
데이터베이스에 시스템 장애가 발생해도 원래 상태로 회복할 수 있어야 함.
체크섬, 저널링(커밋 전 로깅), 롤백 등 기능 제공.
데이터의 정확성, 일관성, 유효성을 유지하는 것.
데이터베이스 값과 실제 값이 일치하는지에 대한 신뢰를 보장함.
개체 무결성: 기본 키의 필드 값은 Null이 허용되지 않음.
참조 무결성: 참조 관계인 두 테이블은 항상 일관된 값 유지.
고유 무결성: 특정 속성에 대해 각 튜플의 값이 달라야 하는 조건이 주어지면 달라야 함. Unique
Null 무결성: 특정 속성 값에 Null이 올 수 없다는 조건이 주어지면 Null 못옴
도메인 무결성: 특정 속성 값이 정의된 도메인이 속해야 하는 것. 성별이면 남 또는 여에 반드시 속함.
키 무결성: 한 릴레이션에는 하나 이상의 키가 존재