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_aytable_b. - Rellenar
table_acon 500.000 filas. - Copiar datos de
table_aatable_busando unINSERT INTO ... SELECTdeclaración. - Durante el proceso de copia, use otra sesión para insertar una nueva fila en
table_a. - Comprueba si
table_bcontiene 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.