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

by Zdeněk Večeřa 2 Comments

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;



Comments ( 2 )

  1. Jasper
    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...
  2. Stodynka
    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

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>