2010-05-15 16 views
2

만약 INSERT와 SELECT가 먼저 실행될 mysql 테이블에서 동시에 수행된다면?MySQL INSERT와 SELECT 우선 순위 우선 순위

예 :

INSERT into users (id) values (1) 

과 : 가정 "사용자"테이블 로우 카운트는이 두 쿼리 동시에 (그것이 동일한 밀리에서 S/마이크로 초 가정)에서 실행되는 0

SELECT COUNT(*) from users 

마지막 쿼리가 0 또는 1을 반환합니까?

답변

5

users 테이블이 MyISAM인지 InnoDB인지에 따라 다릅니다.

MyISAM의 경우 하나의 명령문이나 다른 명령문이 테이블을 잠근다. 제어 할 수있는 것은 거의 없다. locking tables 너머

InnoDB의 경우 트랜잭션 기반입니다. 다중 버전 아키텍처는 테이블에 동시에 액세스 할 수 있으며 SELECT은 트랜잭션이 시작된 순간의 행 수를 보게됩니다. 동시에 INSERT이 계속 발생하면 SELECT에 0 행이 표시됩니다. 실제로 INSERT에 대한 트랜잭션이 아직 커밋되지 않은 경우이 실행되어 몇 초 후에 0 행이 표시 될 수도 있습니다.

두 트랜잭션을 동시에 시작할 방법이 없습니다. 트랜잭션은 몇 가지 순서가 보장됩니다.

2

먼저 실행될 명령문에 따라 다릅니다. 처음 두 번째는 1을 반환하고, 두 번째가 먼저 실행되면 0을 반환합니다. 여러 실제 코어가있는 컴퓨터에서도 실행 중이며 잠금 메커니즘으로 인해 정확히 동일하게 실행되지 않습니다. 시간 스탬프.