Dado que las tablas tienen exactamente las mismas columnas, puede hacer algo como esto:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
He incluido una explicación adicional basada en Wistar's comentario. Los niveles de lectura que se pueden utilizar aquí son:
- LEER COMPROMETIDO :un nivel de aislamiento similar al de Oracle con respecto a las lecturas coherentes (sin bloqueo):cada lectura coherente, incluso dentro de la misma transacción, establece y lee su propia instantánea actualizada
- LEER SIN COMPROMISO :Las sentencias SELECT se ejecutan sin bloqueo, pero es posible que se utilice una versión anterior de una fila. Por lo tanto, al usar este nivel de aislamiento, tales lecturas no son consistentes. Esto también se llama una lectura sucia. De lo contrario, este nivel de aislamiento funciona como LECTURA COMPROMETIDA.
- LECTURA REPETIBLE :Este es el nivel de aislamiento predeterminado para InnoDB. Para las lecturas coherentes, existe una diferencia importante con respecto al nivel de aislamiento de LECTURA COMPROMETIDA:todas las lecturas coherentes dentro de la misma transacción leen la instantánea establecida por la primera lectura. Esta convención significa que si emite varias declaraciones SELECT simples (sin bloqueo) dentro de la misma transacción, estas declaraciones SELECT también son consistentes entre sí.
- SERIALIZABLE :Este nivel es como LECTURA REPETIBLE, pero InnoDB convierte implícitamente todas las declaraciones SELECT simples en SELECT ... LOCK IN SHARE MODE si la confirmación automática está deshabilitada. Si la confirmación automática está habilitada, SELECT es su propia transacción. Por lo tanto, se sabe que es de solo lectura y puede serializarse si se realiza como una lectura coherente (sin bloqueo) y no necesita bloquearse para otras transacciones. (Para forzar un SELECT simple para bloquear si otras transacciones han modificado las filas seleccionadas, deshabilite la confirmación automática).
Espero que esto ayude.