Dla mnie dokumentacja jest trochę niejasna:
Wewnętrzne metody blokowania sugeruje, że w pewnych okolicznościach możliwe jest wstawienie do tabeli MyISAM, podczas gdy inna sesja odczytuje z niej:
Jednak Problemy z blokowaniem tabeli pokazuje sytuację, w której stół zostanie zablokowany do momentu zakończenia SELECT (to pasuje do Twojej sytuacji):
Tabela InnoDB implementuje blokady na poziomie wiersza, więc blokowany będzie tylko wiersz, który jest odczytywany, a nie cała tabela.
Zamiast polegać tylko na dokumentacji, wykonałem mały test:
- Utwórz dwie tabele o tej samej strukturze:
table_aitable_b. - Wypełnij
table_az 500 000 wierszy. - Skopiuj dane z
table_adotable_bużywającINSERT INTO ... SELECToświadczenie. - Podczas kopiowania użyj innej sesji, aby wstawić nowy wiersz do
table_a. - Sprawdź, czy
table_bzawiera nowy rekord.
Gdy obie tabele zawierają MyISAM, table_b nie zawierał nowego rekordu po kopii. Gdy obie tabele zawierają InnoDB, table_b zawierał nowy rekord po kopii. Powtórzyłem to trzy razy i zgodnie z oczekiwaniami wynik za każdym razem był taki sam.
Krótko mówiąc, jeśli Twój stół to MyISAM, zostanie zablokowany. Jeśli to InnoDB, to nie. Oczywiście ten test nie uwzględnia aktualizacji, ale spodziewam się, że wyniki będą podobne.