Za předpokladu, že tabulky mají přesně stejné sloupce, můžete udělat něco takového:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
INSERT INTO NEW_TABLE (SELECT * FROM OLD_TABLE);
COMMIT ;
Zahrnul jsem další vysvětlení na základě Wistar's komentář. Zde lze použít úrovně čtení:
- ČTĚTE ODPOVĚDĚNO :Poněkud úroveň izolace podobná Oracle s ohledem na konzistentní (neuzamykatelné) čtení:Každé konzistentní čtení, dokonce i v rámci stejné transakce, nastavuje a čte svůj vlastní čerstvý snímek
- ČTĚTE BEZ ZÁVAZKU :Příkazy SELECT se provádějí bez uzamčení, ale může být použita možná dřívější verze řádku. Při použití této úrovně izolace tedy taková čtení nejsou konzistentní. Tomu se také říká špinavé čtení. Jinak tato úroveň izolace funguje jako READ COMMITTED.
- OPAKOVATELNÉ ČTENÍ :Toto je výchozí úroveň izolace pro InnoDB. Pro konzistentní čtení existuje důležitý rozdíl od úrovně izolace READ COMMITTED:Všechna konzistentní čtení v rámci stejné transakce čtou snímek vytvořený prvním čtením. Tato konvence znamená, že pokud v rámci jedné transakce zadáte několik jednoduchých (neuzamykatelných) příkazů SELECT, budou tyto příkazy SELECT konzistentní i ve vztahu k sobě navzájem.
- SERIALIZOVATELNÉ :Tato úroveň je jako REPEATABLE READ, ale InnoDB implicitně převádí všechny prosté příkazy SELECT na SELECT ... LOCK IN SHARE MODE, pokud je zakázáno automatické potvrzení. Pokud je povoleno automatické potvrzení, SELECT je vlastní transakce. Proto je známo, že je pouze pro čtení a může být serializován, pokud se provádí jako konzistentní (neuzamykatelné) čtení a nemusí se blokovat pro další transakce. (Chcete-li vynutit zablokování prostého SELECT, pokud jiné transakce upravily vybrané řádky, deaktivujte automatické potvrzení.)
Doufám, že to pomůže.