RDBMS에 대해 방금 읽었으며 및 RDBMS의 속성 중 하나가 원자력입니다. 따라서 계좌에서 돈이 인출되어 으로 이체 된 경우 거래 이 완전히 발생하거나 이 전혀 발생하지 않습니다. 부분 거래는 입니다. 그러나 실제로는 이 어떻게 보장됩니까? 상기 시나리오 위한Atomicity 보장 SQL
는 SQL 쿼리 (I)과 같이 accounts
세트 잔액 = 밸런스를 업데이트 할 수 - ac_num = 101 (II) 업데이트 량 accounts
세트 잔액 = 밸런스 + 양 WHERE ac_num = 102
어떤 의미로 원 자성을 보장하지 못합니까? 그래서 실제로 어떻게됩니까?
아니요, 데이터베이스를 잠그지 않습니다. 트랜잭션 격리 모드에 따라 일반적으로 데이터베이스를 읽는 다른 사용자는 커밋되기 전에 업데이트를 볼 수 없습니다 (이전 값이 표시됨). – MarkR
예, 트랜잭션 격리 모드에 따라 다릅니다. 최신 RDBMS에서 : s 잠금은 행 수준에서 발생합니다. 이 "이전 값"은 반복적 인 읽기 편차를 유발할 수 있습니다. –