MySQL: Jak překopírovat/přesunout řádky do jiné tabulky?

Možná jste někdy narazili na potřebu v rámci jedné databáze překopírovat řádky z jedné tabulky do tabulky druhé. Nabízí se obstrukční řešení, kde získáme pomocí SELECT všechny položky, poté výsledky proženeme skrz while cyklus a mysql_fetch_array, a v každém průchodu cyklu provést INSERT. Případně si takový INSERT „poskládat“ a provést jen jednou; zde ale pozor na případný limit ve velikosti dotazu.

Takový způsob by byl samozřejmě zdlouhavý a chybný. Existuje naprosto jednoduché a elegantní řešení.

Jak překopírovat položky (řádky) do jiné tabulky?

INSERT `tab2`
SELECT *
FROM `tab1`
WHERE
`id`>3

Asi není potřeba příliš obsáhlý komentář. Získají se všechna data z tabulky tab1, která mají id větší jak 3. Tato data data se zapíší do tabulky tab2.

Přesun položek (řádků) do jiné tabulky

Pokud je potřeba data přesunout, je nutné po zavolání výše uvedeného dotazu data z první tabulky smazat. Lze to udělat následovně:

DELETE
FROM `tab`
WHERE `id`>3

Kompletní SQL dotaz včetně transakce

START TRANSACTION;

INSERT `tab2`
SELECT *
FROM `tab`
WHERE`id`>3; DELETE
FROM `tab`
WHERE`id`>3;

COMMIT;




2 Responses to “MySQL: Jak překopírovat/přesunout řádky do jiné tabulky?”

  • Jasper Says:

    Oba SQL dotazy pro přesun (kopie + smazání) by bylo lepší uzavřít ještě do transakce, jinak se může stát, že dojde k nekonzistenci…

  • Stodynka Says:

    Dobrý den, jak mám překopírovat jen některé položky z tabulky 1 do tabulky 2, aby se mi překopírovali i identifikátory v tabulce?

Leave a Reply