За мен документацията е малко неясна:
Методи за вътрешно заключване предполага, че при някои обстоятелства е възможно да се вмъкне в MyISAM таблица, докато друга сесия чете от нея:
Въпреки това, Проблеми със заключването на таблица показва ситуация, при която таблицата ще бъде заключена, докато SELECT завърши (това отговаря на вашата ситуация):
Таблицата InnoDB прилага заключвания на ниво ред, така че само четеният ред ще бъде заключен, а не цялата таблица.
Вместо да разчитам само на документацията, опитах малък тест:
- Създайте две таблици с една и съща структура:
table_aиtable_b. - Попълнете
table_aс 500 000 реда. - Копиране на данни от
table_aкъмtable_bс помощта наINSERT INTO ... SELECTизявление. - По време на процеса на копиране използвайте друга сесия, за да вмъкнете нов ред в
table_a. - Проверете дали
table_bсъдържа новия запис.
Когато и двете таблици са MyISAM, table_b не съдържа новия запис след копието. Когато и двете таблици са InnoDB, table_b съдържаше новия запис след копието. Повторих това три пъти и, както се очакваше, резултатът беше един и същ всеки път.
Така че, накратко, ако вашата таблица е MyISAM, тя ще бъде заключена. Ако е InnoDB, няма да стане. Разбира се, този тест не отчита актуализации, но очаквам резултатите да бъдат подобни.