2016-12-15 7 views
1

예를 들어 한 사용자는 다음과 같이 쿼리를 실행 :여러 동시에 요청 된 쿼리의 실행 순서는

UPDATE table SET column = 100; 

그리고 두 번째 사용자 :

UPDATE table SET column = 200; 

그리고 말할 수,이 두 쿼리가 요청 정확히 같은 시간, 초, 동일한 나노초 (또는이 DB에 대한 최소 시간 측정 단위)를 사용하면 어떤 쿼리가 먼저 실행되고 어느 초는 실행됩니까?

이 경우 데이터베이스는 쿼리 순서를 임의로 선택합니까?

p.s. 나는 구체적인 데이터베이스에 태그를 붙이지 않는다. 모든 주요 RDBMS의 메커니즘은 비슷하다고 생각한다. 그렇지 않을 수도 있습니다.

+0

당신의 동기는 무엇입니까? –

+0

이 경우 "선택"메커니즘이 작동하는 방식을 이해하십시오. – RIKI

+1

통계에서 매우 특별한 의미가 있으므로 "임의"를 선택하지 않습니다. 나는 그것을 "불확정"또는 "임의"라고 부를 것입니다. –

답변

2

RDBMS는 약식 ACID라는 속성 집합을 구현합니다. Wikipedia explains the concept.

기본적으로 ACID 호환 데이터베이스는 일부 수준 (테이블, 페이지 및 행 잠금이 일반적 임)에서 데이터를 잠급니다. 원칙적으로 동일한 객체에 대해 동시에 하나의 쓰기 잠금 만 획득 할 수 있습니다. 따라서 데이터베이스는 임의로 트랜잭션 중 하나의 행을 잠급니다.

다른 트랜잭션은 어떻게됩니까? 하지만 두 가지 중 하나가 발생해야합니다.

  • 트랜잭션은 잠금을 사용할 수있을 때까지 대기합니다. 그래서 "결국", 그것은 가치를 할당 할 것입니다 (자물쇠를 잃고, 전쟁에서이기십시오;).
  • 해당 행을 사용할 수 없으므로 트랜잭션이 "시간 초과"됩니다.

테이블의 모든 행이 영향을 받기 때문에 사례가 다소 복잡합니다. 하지만 결국 모든 행은 ACID 호환 데이터베이스에서 동일한 값을 가져야합니다.

주요 데이터베이스는 (일반적으로) ACID를 준수한다는 점에 유의해야합니다. 그러나 잠금 및 트랜잭션 및 이와 유사한 메커니즘이 있더라도 세부 사항은 데이터베이스마다 다를 수 있습니다.

1

보통 DML 작업은 작업 원자 일관된 만든되는 덕분에, DML 잠금을 획득하여 수행한다. 따라서 귀하의 경우에는 쿼리 중 하나에 DML 잠금이 주어지고 실행 된 다음 두 번째 쿼리가 비슷한 방식으로 진행됩니다. 하나는 첫 번째와 두 번째로 간다.

+0

특히 Oracle과 같이 데이터베이스 관련 DML 잠금 사운드가 있습니다. 메커니즘은 다른 데이터베이스에 있지만 용어는 다를 수 있습니다. –