Dato che le tabelle hanno esattamente le stesse colonne, puoi fare qualcosa del genere:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
Ho incluso alcune spiegazioni aggiuntive basate su Wistar's commento. I livelli di lettura che possono essere utilizzati qui sono:
- LEGGERE IMPEGNO :Un livello di isolamento in qualche modo simile a Oracle rispetto alle letture coerenti (non bloccate):ogni lettura coerente, anche all'interno della stessa transazione, imposta e legge la propria nuova istantanea
- LEGGI SENZA IMPEGNO :le istruzioni SELECT vengono eseguite in modo non bloccante, ma potrebbe essere utilizzata una possibile versione precedente di una riga. Pertanto, utilizzando questo livello di isolamento, tali letture non sono coerenti. Questo è anche chiamato una lettura sporca. Altrimenti, questo livello di isolamento funziona come READ COMMITTED.
- LETTURA RIPETIBILE :Questo è il livello di isolamento predefinito per InnoDB. Per le letture coerenti, esiste un'importante differenza rispetto al livello di isolamento READ COMMITTED:tutte le letture coerenti all'interno della stessa transazione leggono lo snapshot stabilito dalla prima lettura. Questa convenzione significa che se si emettono più istruzioni SELECT semplici (non bloccanti) all'interno della stessa transazione, queste istruzioni SELECT sono coerenti anche l'una rispetto all'altra.
- SERIALIZZABILE :Questo livello è come REPEATABLE READ, ma InnoDB converte implicitamente tutte le semplici istruzioni SELECT in SELECT ... LOCK IN SHARE MODE se l'autocommit è disabilitato. Se l'autocommit è abilitato, SELECT è la sua transazione. Pertanto è noto per essere di sola lettura e può essere serializzato se eseguito come lettura coerente (non bloccante) e non è necessario bloccarlo per altre transazioni. (Per forzare un semplice SELECT al blocco se altre transazioni hanno modificato le righe selezionate, disabilitare il commit automatico.)
Spero che questo aiuti.