RDBMS란
Relational Database : Relational Model을 기반으로한 Database이다.
RDBMS는 Relational Database Management System을 말한다.
특징
- 테이블 형태로 표현되며 row와 column을 가진다.
- 테이블 안에는 각 레코드(row)를 구분할 수 있는 PK(Primary key)를 가진다.
- 이 PK로 다른 테이블과 연결될 수 있으며, 이를 FK(Foreign key)라고 한다.
- 하나의 작업단위를 Transaction(트랜잭션)이라고 한다.
Transaction
- 데이터의 CRUD(create, read, update, delete)를 문제없이 처리하기 위해 ACID 특성을 지원한다.
- Atomicity(원자성) - 모두 처리되거나 아니거나
- 예를 들면 송금이 취소되면 돈을 받는 액션 등 모두가 취소되어야한다.
- Consistency(일관성) - 항상 유효한 데이터만을 가진다.
- 예를 들면 설정을 CASCADE로 했다면 부모 테이블에서 삭제된 row는 자식 테이블에도 없어야한다.
- Isolation(격리성) - 다른 트랜잭션과 독립적이다.
- 커밋되지 않은 다른 트랜잭션의 변경사항에 영향을 받지 않는다.
- Durability(영속성) - 커밋되면 그 상태를 계속 유지한다.
- 컴퓨터를 껐다 켜도 유지된다.
- Atomicity(원자성) - 모두 처리되거나 아니거나
Isolation Level
트랜잭션을 진행할 때
Dirty Read : 커밋되기도 전에 다른 트랜잭션에서 볼 수 있는 현상
Non Repeatable read : 동일한 쿼리를 실행해도 다른 트랜잭션의 영향을 받아 같은 결과를 보장하지 못하는 현상
<-> Repeatable read : 반대로 동일한 쿼리에 항상 같은 값을 보장하는 현상
Phantom read : 다른 트랜잭션의 업데이트에 영향을 받아 레코드가 보였다가 안보였다가 하는 현상
위와 같은 문제가 생길 수 있다.
그래서 4가지 Isolation Level(격리 수준) 설정을 제공한다.
1. Read Uncommitted - 커밋하지 않은 데이터를 다른 트랜잭션이 볼 수 있다.
2. Read Committed - 커밋된 데이터만 다른 트랜잭션이 볼 수 있다.
3. Repeatable Read - 많은 DBMS들의 디폴트값으로 한 번 조회한 데이터를 반복해서 조회해도 결과가 같다.
4. Serializable - 완벽하게 읽기 일관성 모드를 제공한다.
아래로 갈수록 격리 수준이 높다.
JDBC로 실습
jdbc에서 auto commit 설정을 false로 변경해 직접 확인 가능하다.
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost~", "root", null);
con.setAutoCommit(false);
이후 원하는 시점에
con.Commit();
하며 커밋 전과 후 데이터베이스 값을 출력해보면 값이 커밋 후에 반영됨을 알 수 있다.
그리고 커밋이 실패하면 모두 되돌려지며
이때 savepoint를 통해 중간값을 저장할 수도 있다.
'Data Engineering' 카테고리의 다른 글
DBMS 전반적 이해 & Oracle 설치, 계정 생성 (0) | 2023.12.24 |
---|