Database (14) 썸네일형 리스트형 4. 트랜잭션 격리성 (Isolation) 3가지 동시성 문제Dirty Read: 한 트랜잭션이 아직 COMMIT 하지 않은, 수정 중인 데이터를 다른 트랜잭션이 읽는 것Non-Repeatable Read: 한 트랜잭션 내에서 똑같은 SELECT 쿼리를 두 번 실행했는데, 그 사이에 다른 트랜잭션이 값을 수정하고 COMMIT 하여 두 쿼리의 결과가 다르게 나오는 현상Phantom Read: 한 트랜잭션 내에서 특정 범위의 데이터를 두 번 읽었는데, 중간에 다른 트랜잭션이 새로운 행을 INSERT 하고 COMMIT 하여, 첫 번째 조회에서는 없었던 새로운 행(유령)이 두 번째 조회에서 나타나는 현상1. Dirty ReadT2가 T1의 미커밋 값(40000)을 읽고, 이후 T1이 롤백해 그 값이 무효가 된다.sequenceDiagram par.. 3. 데이터베이스 동시성 제어 (Concurrency Control) 동시성 제어 (Concurrency Control)시나리오: A는 50000원 B는 20000원이 있다. A가 B에게 1만원을 이체하는 트랜잭션(T1)을 실행 중이다.UPDATE로 A의 잔고는 4만원으로 바뀌었지만, 아직 COMMIT 은 하지 않아 B의 잔고는 2만원인 '중간 상태'다.sequenceDiagramparticipant T1 as 트랜잭션 1 (이체)participant DB as DB Serverparticipant T2 as 트랜잭션 2 (총잔고 계산)Note over T1,T2: ❌ 격리성 없음 (READ UNCOMMITTED, Dirty Read 발생)T1->>DB: BEGIN TRANSACTIONT2->>DB: BEGIN TRANSACTIONNote over DB: 초기 상태 A =.. 2. 트랜잭션의 ACID 속성 트랜잭션의 ACID 속성데이터베이스의 트랜잭션을 신뢰하기 위해서는 다음 속성을 만족해야한다.AtomicityConsistencyIsolationDurabilityACID는 트랜잭션이 지켜야 할 네 가지 속성이고, InnoDB는 각각을 서로 다른 메커니즘으로 보장한다. Undo Log, Lock, MVCC로 속성을 보장할수있다.원자성(Atomicity): Undo Log원자성은 "트랜잭션의 모든 작업이 전부 반영되거나, 전부 취소되거나" 둘 중 하나여야 한다. 중간에 실패하면 이미 한 작업도 없던 일로 되돌려야 한다. 트랜잭션이 데이터를 쓰기 전에 그 이전 값을 Undo Log에 기록해두고, 트랜잭션이 커밋되기 전에 ROLLBACK이 일어나거나 트랜잭션이 비정상 종료되면 Undo Log를 거꾸로 적용해서 .. 1. 트랜잭션의 필요성 데이터 변경 행위에 따른 무결성 지키기일단 먼저, 데이터 타입과 제약조건으로 무결성의 상태를 지켜야한다. 그 다음에 트랜잭션은 데이터의 행위에 대해서 무결성을 지킨다.시나리오‘송금’이란 하나의 비즈니스 행위 뒤에서, 데이터베이스는 최소한 두 가지의 작업을 순차적으로 처리해야 한다.orders 테이블에 새로운 주문 정보를 INSERT 한다.products 테이블에서 방금 주문된 상품의 재고(stock_quantity )를 UPDATE 하여 주문 수만큼 줄인다.만일 트랜잭션이 없다면?INSERT 쿼리로 orders 테이블에 새로운 주문이 성공적으로 기록UPDATE 쿼리로 products 테이블의 재고를 줄이려고하는데 애플리케이션 서버나 데이터베이스 서버가 다운되거나 문제 발생, 네트워크 연결 끊김, 디스크 .. 서브 쿼리 (Sub Query) 정리 서브 쿼리 필요성JOIN 만으로는 한번에 답하기 어려운, 여러 단계의 사고를 거쳐야 하는 문제가 있다.예를들어, "우리 쇼핑몰에서 판매하는 상품들의 평균 가격보다 비싼 상품은 무엇이 있을까?"이다. 이럴때 2번에 걸쳐서 쿼리를 실행시킬수있다.문제 분할1단계: 상품의 평균 가격 구하기SELECT AVG(price) FROM products;2단계: 평균보다 비싼 상품 구하기SELECT name, priceFROM productsWHERE price > 167166.67; -- 계산한 평균 가격 구하기쿼리 2번 실행 (java)// 1번 쿼리 실행String sql1 = "SELECT AVG(price) FROM products";double avgPrice = stmt.executeQuery(sql1) .. 조인(JOIN) 정리 무결성 제약 조건기본 키(Primary Key)기본키는 여러 후보키(유일하게 식별 가능한) 중에서 단 하나로 선정해서 사용한다. 즉, PK는 테이블 내에서 절대로 중복될 수 없다. 그리고 여기서 단 하나란 속성의 집합인 복합키(Composite Key)도 가능하다. (ex 고객번호, 도서번호)외래키 (Foreign Key)외래키(FK)는 다른 테이블에서 기본키(PK)를 참조하는 속성이다. 이렇게 다른 테이블의 기본키(PK)를 참조해서 관계를 표현한다.데이터의 일관성을 유지하기위해서 테이블에서 PK 값이 변경되면 이 기본키를 참조하는 FK도 변경되어야한다.즉, FK는 PK를 참조하고 PK는 FK를 참조하지 않으므로, PK와 달리 FK의 중복값이나 NULL을 허용한다. 그리고 FK는 자기 자신의 PK값도 참.. 이전 1 2 다음