2017-12-29 1 views
1

나는이 개 고객과 같이 동일한 속성을 액세스하는 경우 : 속성 수준의 경쟁 - SQL

c1 UPDATE ACCOUNT set balance = balance + 3000 
     where NUM_ACCOUNT = 12390 

c2 UPDATE ACCOUNT set balance = balance - 1500 
     where NUM_ACCOUNT = 12390 

이 균형이 처음 € 10,000이라고 가정을, 어떤 최종 값 것입니까? 1500 = 11500
  • 10000 + 3000 = 13000
  • 10000 - - + 3000

  • +3

    [데이터베이스 트랜잭션] (https://docs.oracle.com/cd/B19306_01/server.102/b14220/transact.htm)에 대해 들어 본 적이 있습니까? – cdaiga

    +1

    시도해 보셨습니까? – TcKs

    +1

    트랜잭션이 커밋되거나 롤백되지 않으면 다른 세션의 동일한 레코드에서 업데이트가 허용되지 않습니다. 레코드가 잠겨 있습니다. –

    답변

    1

    그것은 에게 € 11.500,00을 (것 커밋 someting 매우 불쾌한 일이 발생하지 않는 한).

    특정 DBMS에 태그를 지정하지 않았으므로 Oracle 및 MS-SQL 설명서 및 위키피디아의 참조로 링크됩니다. 이봐 요, 만약 당신이 현대적인 relational database systems이 어떻게 처리되는지 깊이 들어보고 싶다면 많이 읽으십시오.

    Atomicit

    Transactions

    transactions - MSDN

    좋은 소식은 DBMS (어떤 점잖은 하나)은 귀하에게 투명하게 일을 할 것입니다 당신이 그것을 귀찮게 할 필요가 없습니다 및 장난 방지 있어야합니다 여기서 무엇을하고 있는지 잘 알지 못한다면 트랜잭션 옵션 (읽지 않은 커밋, 스냅 샷 등)이 필요합니다.

    기본적으로 시스템은 두 트랜잭션을 모두 받고 deadlocks 및 기타 concurrency 호를 피하고 하나의 커밋을 시도하고 locks을 존중합니다.

    1

    관계형 데이터베이스는 ACID properties이라는 것을 구현합니다. 기본적으로 이것은 사용자 트랜잭션이 독립적으로 실행되는 것처럼 각 사용자가 일관된 데이터 뷰를 볼 수있게합니다. 이 일관성 (잘 "일관성"은 기술적으로 네 가지 속성 중 두 번째 속성 임)은 관계형 데이터베이스가 데이터를 변경하는 응용 프로그램에 사용되는 주요 이유입니다.

    따라서 ACID 준수 (설정해야하지만 재정의 될 수 있음)에 대한 설정이 이루어진 경우 결과는 +1500이됩니다.