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_a
etable_b
. - Compila
table_a
con 500.000 righe. - Copia i dati da
table_a
atable_b
utilizzando unINSERT INTO ... SELECT
dichiarazione. - Durante il processo di copia, usa un'altra sessione per inserire una nuova riga in
table_a
. - Controlla se
table_b
contiene 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.