데이터베이스에서 트랜잭션이란 하나의 거래를안전하게 처리하도록 보장해주는 것을 뜻합니다.
데이터베이스의 트랜잭션에서는 중요한 것들이 있습니다.
트랜잭션 ACID
- 원자성 : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다.
- 일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야한다.
(데이터 베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.) - 격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.
트랜잭션 격리 수준 : 동시에 같은 데이터에 접근하지 않게 하기 위한 단계 - 지속성 : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. (문제시 복구 가능해야함)
트랜잭션은 원자성, 일관성, 지속성은 보장하지만
격리성을 완벽히 보장하려면 순차적인 실행이 필요합니다.
순차적 실행을 하면 동시 처리를 하지 못하기 때문에 성능이 매우 나빠집니다.
이런문제로 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했습니다.
트랜잭션 격리 수준 Isolation level
- READ UNCOMMITED - 커밋되지 않은 읽기
- READ COMMITTED - 커밋된 읽기
- REPEATABLE READ - 반복가능한 읽기
- SERIALIZABLE - 직렬화 가능
보통은 READ COMMITTED 를 디폴트로사용합니다.
Commit과 Rollback
트랜잭션이 시작하고 쿼리를 전부 마치면 Commit 또는 Rollback을 해야 세션이 종료됩니다.
- Commit : 변경된 데이터를 반영
- Rollback : 세션 시작 전으로 데이터를 복구
트랜잭션 격리 수준에 따라 데이터의 격리성이 달라집니다.
커밋되지 않은 읽기로 설정하면 Commit을 하지 않아도 변경사항이 다른 세션에서도 보여집니다.
커밋된 읽기는 Commit을 해야지만 다른 세션에서 보여집니다.
자동커밋 수동커밋
자동 커밋은 쿼리를 날릴때마다 Commit을 합니다.
수동 커밋은 Commit을 해줘야지 Commit을 합니다.
즉, 제대로된 트랜잭션을 하려면 수동 커밋으로 설정을 해야합니다.
set autocommit ture; // 자동커밋 설정
set autocommit false; // 수동커밋 설정
'DB' 카테고리의 다른 글
DB 락 (0) | 2023.08.18 |
---|---|
DataSource란? (0) | 2023.08.17 |
커넥션 풀을 사용하는 이유 (0) | 2023.08.17 |