Per me, la documentazione è un po' poco chiara:
Metodi di blocco interno suggerisce che, in alcune circostanze, è possibile inserire in una tabella MyISAM mentre un'altra sessione sta leggendo da essa:
Tuttavia, Problemi di blocco delle tabelle mostra una situazione in cui la tabella sarà bloccata fino al completamento di SELECT (questo si adatta alla tua situazione):
La tabella InnoDB implementa i blocchi a livello di riga, quindi solo la riga letta verrà bloccata, anziché l'intera tabella.
Invece di fare affidamento solo sulla documentazione, ho provato un piccolo test:
- Crea due tabelle con la stessa struttura:
table_aetable_b. - Compila
table_acon 500.000 righe. - Copia i dati da
table_aatable_butilizzando unINSERT INTO ... SELECTdichiarazione. - Durante il processo di copia, usa un'altra sessione per inserire una nuova riga in
table_a. - Controlla se
table_bcontiene il nuovo record.
Quando entrambe le tabelle erano MyISAM, table_b non conteneva il nuovo record dopo la copia. Quando entrambe le tabelle erano InnoDB, table_b conteneva il nuovo record dopo la copia. L'ho ripetuto tre volte e, come previsto, il risultato è stato lo stesso ogni volta.
Quindi, in breve, se il tuo tavolo è MyISAM, sarà bloccato. Se è InnoDB, non lo farà. Naturalmente, questo test non considera gli aggiornamenti, ma mi aspetto che i risultati saranno simili.