1000 개의 행을 삽입한다고하면 어떻게됩니까? 2 초 후 다른 누군가가 동일한 위치에 행을 삽입하려고했습니다.두 개의 삽입이 동시에 이루어짐
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
삽입이 완료 될 때까지 해당 행이 삽입 되나요? (MyISAM)
1000 개의 행을 삽입한다고하면 어떻게됩니까? 2 초 후 다른 누군가가 동일한 위치에 행을 삽입하려고했습니다.두 개의 삽입이 동시에 이루어짐
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
삽입이 완료 될 때까지 해당 행이 삽입 되나요? (MyISAM)
어떤 종류의 거래 및/또는 잠금을 사용하고 있는지에 따라 다릅니다.
큰 INSERT 문 하나를 발행하면 단일 작업으로 원자 적으로 완료됩니다. 그들이 INSERT의 전체를 스팸한다면, 두 번째 쿼리는 그 둘 사이에 떨어질 것입니다.
이 종류의 것을 제어하려면 Table Locking을 조사해야합니다. 그렇지 않으면 LOCK TABLES
와 UNLOCK 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;
읽거나 테이블에 기록 할 수있을 것입니다.
OP는 "MyISAM"이라고 말했습니다 (간신히). –
좋은 점, 나는 그것을 놓쳤다. 그렇지만 기본 저장소 엔진 특성에 너무 많이 의존하지 않을 것을 권장하며 가능하면 명시 적으로 지정하는 것이 좋습니다. 다음 주 클라이언트는 InnoDB로 이동 한 다음 모든 배팅을 해제 할 수 있습니다. – Cylindric
짧은 대답은 : 그것은 (예를 들어 concurrent_insert
의 값) MySQL 서버의 구성에 따라 달라집니다 :
쿼리의 당신이 당신의 데이터를 삽입 할 실행을 따라 달라집니다.
+1 이것은 OP가 이해하는 데 중요하지만 OP는 "동일한 위치에 행 삽입"이라고 말했습니다. –
의 MyISAM 테이블 수준 잠금을 사용합니다. 다른 삽입물은 기다려야합니다
+1 답변이지만, 그 사실을 명확히 할 수 있습니다. [adrien 's answer] (http://stackoverflow.com/questions/10449035/two-inserts-simultaniously/10449092#10449092)를 참조하십시오. –
:/ive는 고성능 mySql을 읽기 시작했고 최선의 선택을 제공합니다. – kommradHomer
초판입니다. :) –
제 4의 컬러로 보라색을 선택한 사람은 본 적이 없습니다 :) – kommradHomer