Giv, at tabellerne har nøjagtig de samme kolonner, du kan gøre noget som dette:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
Jeg har inkluderet en ekstra forklaring baseret på Wistar's kommentar. De læseniveauer, der kan bruges her, er:
- LÆS ENGAGEMENT :Et noget Oracle-lignende isolationsniveau med hensyn til konsistente (ikke-låsende) læsninger:Hver konsistent læsning, selv inden for den samme transaktion, sætter og læser sit eget friske øjebliksbillede
- LÆS UENGAGEMENT :SELECT-sætninger udføres på en ikke-låsende måde, men en mulig tidligere version af en række kan bruges. Ved at bruge dette isolationsniveau er sådanne aflæsninger derfor ikke konsekvente. Dette kaldes også en beskidt læsning. Ellers fungerer dette isolationsniveau som READ COMMITTED.
- LÆSNING KAN GENTAGES :Dette er standardisolationsniveauet for InnoDB. For konsistente læsninger er der en vigtig forskel fra READ COMMITTED isolationsniveauet:Alle konsistente læsninger inden for den samme transaktion læser øjebliksbilledet etableret ved den første læsning. Denne konvention betyder, at hvis du udsteder flere almindelige (ikke-låsende) SELECT-sætninger inden for samme transaktion, er disse SELECT-sætninger også konsistente med hensyn til hinanden.
- SERIALISERBAR :Dette niveau er ligesom REPEATABLE READ, men InnoDB konverterer implicit alle almindelige SELECT-sætninger til SELECT ... LOCK IN SHARE MODE, hvis autocommit er deaktiveret. Hvis autocommit er aktiveret, er SELECT sin egen transaktion. Det er derfor kendt for at være læsebeskyttet og kan serialiseres, hvis det udføres som en konsekvent (ikke-låsende) læsning og behøver ikke at blokere for andre transaktioner. (For at tvinge en almindelig SELECT til at blokere, hvis andre transaktioner har ændret de valgte rækker, skal du deaktivere autocommit.)
Jeg håber, at dette hjælper.