CAST(A.DAILY_FEE*30*(1-B.DISCOUNT_RATE*0.01) AS SIGNED) AS FEE
💡 CAST 연산자
: 계산된 FEE값을 정수로 변환
AS SIGNED : 부호를 유지
AS UNSIGNED : 부호 제거
CAST(A.DAILY_FEE*30*(1-B.DISCOUNT_RATE*0.01) AS SIGNED) AS FEE
💡 CAST 연산자
: 계산된 FEE값을 정수로 변환
AS SIGNED : 부호를 유지
AS UNSIGNED : 부호 제거
병행제어(concurrency control)를 하지 않을 때 발생할 수 있는 문제점
1) 갱신 분실 (lost update)
- 두 트랜잭션이 동시에 같은 데이터를 갱신할 때, 하나의 트랜잭션이 그 데이터를 갱신하기 전에 다른 트랜잭션이 갱신함으로써 한 트랜잭션의 갱신 연산이 무효화됨.
2) 모순성 (inconsistency)
- 하나의 트랜잭션이 여러 데이터 갱신 연산을 수행할 때, 일관성 없는 상태의 데이터베이스에서 데이터를 가져옴으로써 데이터의 불일치가 발생하는 것을 의미한다. 즉, 트랜잭션에서 이루어지는 연산대로 전과 후가 일관성이 있어야 하는데, 중간에 다른 트랜잭션의 연산작업으로 인해 일관성이 없게 됨.
3) 연쇄 복귀 (cascading rollback)
- 병행 수행되던 둘 이상의 트랜잭션 중 어느 한 트랜잭션에 오류가 발생하여 rollback하면 다른 트랜잭션들도 함께 rollback되는 현상.
그런데, 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능
⇒ rollback을 하고자 하는 트랜잭션이 처음상태로 돌아가려고 해도 다른 트랜잭션에서 이미 연산 작업을 완료하고 떠났기 때문에 복귀 작업 불가능
트랜잭션 격리 수준(Isolation level) 개념 정리 (0) | 2022.12.27 |
---|
트랜잭션 isolation level
트랜잭션 isloation level은 아래의 4가지 단계로 구분된다.
- 따라서 read commited의 경우 하나의 트랜잭션에서 같은 쿼리를 두 번 실행하면 처음의 쿼리결과와 두번째 쿼리 결과가 다를 수 있다.
- repeatable read는 하나의 트랜잭션에서 같은 쿼리를 두 번 실행하더라도 두 결과가 동일하다.
여기서 Phantom read란?
Phantom read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행 시, 첫 번째 쿼리에서 없던 레코드(유령, Phantom)가 두 번째 쿼리에서 발생하는 현상
non-repeatable read와 phantom read는 무슨 차이??
둘 다 한 트랙잭션 내에서 같은 쿼리를 두 번 실행했을 때 처음 쿼리 결과와 두번째 쿼리 결과가 다를 때를 말한다.
- non-repeatable read는 한 레코드의 값이 다른 경우, 즉 달라진 value에 초점
- phantom read는 없던 레코드가 생기거나, 있던 레코드가 없어지는 경우, 즉 레코드의 존재 유무에 초점
repeatable read isolation level에서는 non-repeatable read가 발생하지 않는다.
- 다른 트랜잭션이 수정사항을 commit하더라도, 그 트랜잭션이 자신보다 늦게 생긴 트랜잭션이면 해당 변경사항을 반영하지 않기 때문이다.
병행제어(concurrency control)를 하지 않을 때 발생할 수 있는 문제점 (0) | 2023.06.27 |
---|