Ge att tabellerna har exakt samma kolumner kan du göra något så här:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
Jag har inkluderat ytterligare en förklaring baserad på Wistars kommentar. Läsnivåerna som kan användas här är:
- LÄS ENGAGERAG :En något Oracle-liknande isoleringsnivå med avseende på konsekventa (icke-låsande) läsningar:Varje konsekvent läsning, även inom samma transaktion, ställer in och läser sin egen färska ögonblicksbild
- LÄS OENGAGERAD :SELECT-satser utförs på ett icke-låsande sätt, men en möjlig tidigare version av en rad kan användas. Om man använder denna isoleringsnivå är sådana läsningar därför inte konsekventa. Detta kallas också en smutsig läsning. Annars fungerar denna isoleringsnivå som READ COMMITTED.
- REPETERBAR LÄSNING :Detta är standardisoleringsnivån för InnoDB. För konsekventa läsningar finns det en viktig skillnad från isoleringsnivån READ COMMITTED:Alla konsekventa läsningar inom samma transaktion läser ögonblicksbilden som fastställdes vid den första läsningen. Denna konvention innebär att om du utfärdar flera vanliga (icke-låsande) SELECT-satser inom samma transaktion, är dessa SELECT-satser konsekventa även med avseende på varandra.
- SERIALISERBAR :Denna nivå är som REPEATABLE READ, men InnoDB konverterar implicit alla vanliga SELECT-satser till SELECT ... LÅS I DELNINGSLÄGE om autocommit är inaktiverat. Om autocommit är aktiverat är SELECT sin egen transaktion. Det är därför känt att det endast kan läsas och kan serialiseras om det utförs som en konsekvent (icke-låsande) läsning och behöver inte blockeras för andra transaktioner. (För att tvinga en vanlig SELECT att blockera om andra transaktioner har ändrat de valda raderna, inaktivera autocommit.)
Jag hoppas att detta hjälper.