2012-05-04 6 views
2

1000 개의 행을 삽입한다고하면 어떻게됩니까? 2 초 후 다른 누군가가 동일한 위치에 행을 삽입하려고했습니다.두 개의 삽입이 동시에 이루어짐

20secondquery 
1|yellow 
2|blue 
3|green 
4|violet 

2secondquery 
4|blue 

삽입이 완료 될 때까지 해당 행이 삽입 되나요? (MyISAM)

+0

제 4의 컬러로 보라색을 선택한 사람은 본 적이 없습니다 :) – kommradHomer

답변

1

어떤 종류의 거래 및/또는 잠금을 사용하고 있는지에 따라 다릅니다.

큰 INSERT 문 하나를 발행하면 단일 작업으로 원자 적으로 완료됩니다. 그들이 INSERT의 전체를 스팸한다면, 두 번째 쿼리는 그 둘 사이에 떨어질 것입니다.

이 종류의 것을 제어하려면 Table Locking을 조사해야합니다. 그렇지 않으면 LOCK TABLESUNLOCK TABLES 아무것도 사이의 시간에 대한

LOCK TABLES widgets WRITE; 
INSERT INTO widgets (name) VALUES ('Widget A'); 
INSERT INTO widgets (name) VALUES ('Widget B'); 
INSERT INTO widgets (name) VALUES ('Widget C'); 
INSERT INTO widgets (name) VALUES ('Widget D'); 
INSERT INTO widgets (name) VALUES ('Widget E'); 
UNLOCK TABLES; 

읽거나 테이블에 기록 할 수있을 것입니다.

+0

OP는 "MyISAM"이라고 말했습니다 (간신히). –

+0

좋은 점, 나는 그것을 놓쳤다. 그렇지만 기본 저장소 엔진 특성에 너무 많이 의존하지 않을 것을 권장하며 가능하면 명시 적으로 지정하는 것이 좋습니다. 다음 주 클라이언트는 InnoDB로 이동 한 다음 모든 배팅을 해제 할 수 있습니다. – Cylindric

1

짧은 대답은 : 그것은 (예를 들어 concurrent_insert의 값) MySQL 서버의 구성에 따라 달라집니다 :

쿼리의 당신이 당신의 데이터를 삽입 할 실행을 따라 달라집니다.

Documentation on concurrent inserts for MyISAM

+0

+1 이것은 OP가 이해하는 데 중요하지만 OP는 "동일한 위치에 행 삽입"이라고 말했습니다. –

2

의 MyISAM 테이블 수준 잠금을 사용합니다. 다른 삽입물은 기다려야합니다

+0

+1 답변이지만, 그 사실을 명확히 할 수 있습니다. [adrien 's answer] (http://stackoverflow.com/questions/10449035/two-inserts-simultaniously/10449092#10449092)를 참조하십시오. –

+0

:/ive는 고성능 mySql을 읽기 시작했고 최선의 선택을 제공합니다. – kommradHomer

+0

초판입니다. :) –

관련 문제