Para mí, la documentación es un poco confusa:
Métodos de bloqueo interno sugiere que, en algunas circunstancias, es posible insertar en una tabla MyISAM mientras otra sesión está leyendo:
Sin embargo, Problemas de bloqueo de tablas muestra una situación en la que la mesa estará bloqueada hasta que se complete la SELECCIÓN (esto encaja con su situación):
La tabla InnoDB implementa bloqueos a nivel de fila, por lo que solo se bloqueará la fila que se lee, en lugar de toda la tabla.
En lugar de confiar solo en la documentación, probé una pequeña prueba:
- Cree dos tablas con la misma estructura:
table_a
ytable_b
. - Rellenar
table_a
con 500.000 filas. - Copiar datos de
table_a
atable_b
usando unINSERT INTO ... SELECT
declaración. - Durante el proceso de copia, use otra sesión para insertar una nueva fila en
table_a
. - Comprueba si
table_b
contiene el nuevo registro.
Cuando ambas tablas eran MyISAM, table_b
no contenía el nuevo registro después de la copia. Cuando ambas tablas eran InnoDB, table_b
contenía el nuevo registro después de la copia. Repetí esto tres veces y, como era de esperar, el resultado fue el mismo cada vez.
Entonces, en resumen, si su mesa es MyISAM, estará bloqueada. Si es InnoDB, no lo hará. Por supuesto, esta prueba no considera actualizaciones, pero espero que los resultados sean similares.