Дайте, че таблиците имат точно същите колони, можете да направите нещо подобно:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
Включих допълнително обяснение въз основа на Wistar коментар. Нивата на четене, които могат да се използват тук, са:
- ЧЕТЕТЕ СЕ ОТВЪРЗАНИ :Донякъде подобно на Oracle ниво на изолация по отношение на последователни (незаключващи) четения:Всяко последователно четене, дори в рамките на една и съща транзакция, задава и чете своя собствена прясна моментна снимка
- ЧЕТЕТЕ НЕПОЛУЧЕНО :Операторите SELECT се изпълняват по незаключващ начин, но може да се използва възможна по-ранна версия на ред. По този начин, използвайки това ниво на изолация, такива четения не са последователни. Това се нарича още мръсно четене. В противен случай това ниво на изолация работи като READ COMMITTED.
- ПОВТОРЯЕМО ЧЕТЕНЕ :Това е нивото на изолация по подразбиране за InnoDB. За последователни четения има важна разлика от нивото на изолация READ COMMITTED:Всички последователни четения в рамките на една и съща транзакция четат моментната снимка, установена от първото четене. Тази конвенция означава, че ако издадете няколко обикновени (незаключващи) оператора SELECT в рамките на една и съща транзакция, тези SELECT оператори също са последователни един спрямо друг.
- МОЖЕ СЕ СЕРИАЛИЗИРАНЕ :Това ниво е като REPEATABLE READ, но InnoDB имплицитно преобразува всички обикновени изрази SELECT в SELECT ... LOCK IN SHARE MODE, ако автоматичното записване е забранено. Ако автоматичното завършване е активирано, SELECT е собствена транзакция. Следователно е известно, че се чете само и може да се сериализира, ако се изпълнява като последователно (незаключващо) четене и не е необходимо да блокира за други транзакции. (За да принудите обикновен SELECT да блокира, ако други транзакции са променили избраните редове, деактивирайте автоматичното завършване.)
Надявам се това да помогне.