Začínáme s MySQL – import dat

V předminulém díle jsem vám pověděl něco málo o možnostech exportu dat z MySQL. Nyní je tedy na řadě import.
V předcházejícím díle jsem vám ukázal možnosti exportu dat z MySQL. Jak již víte, jsou v zásadě dvě možnosti. Tou nejčastěji využívanou je použití příkazu mysqldump. Tento příkaz nabízí mnoho možností v podobě různých přepínačů. Druhou možností je použití SQL příkazu SELECT INTO OUTFILE, o kterém jsem se však nezmiňoval. V dnešním díle je tedy na řadě problematika importu dat. Nejčastěji se při této příležitosti v MySQL setkáte s příkazem mysqlimport, který se podobně jako příkaz mysqldump nachází ve složce Bin s nainstalovanou databází.

Import dat

Dříve, než začnu vysvětlovat způsoby importu dat do MySQL, měl bych se alespoň krátce zmínit o důvodech, které k tomu vedou – zkráceně řečeno, k čemu je to vlastně dobré. Asi tím nejméně příjemným důvodem je havárie SQL serveru (či serveru obecně). I sebelépe udržovaný a nakonfigurovaný server může postihnout chyba (ať již hardwarová, či softwarová) a data, která jste pracně shromaždovali, jsou rázem pryč. Každý správce serveru si pro tyto případy vytváří zálohy. Měl by proto mít zálohovaná i data z MySQL (viz. předchozí díl). Tato zálohovaná data pak může bez větších problémů znovu obnovit právě pomocí importu dat.

Dalším častým důvodem (a nutno říct, že mnohem příjemnějším) je prostý přenos dat z jiné databáze (nemusí jít nutně o MySQL), která je umístěna na jiném místě a vy potřebujete provést synchronizaci dat. V těchto či jiných případech využijete již zmíněný příkaz mysqlimport.

Vstupní data přitom mohou být dvojího druhu. Buďto se jedná o soubory CSV (data oddělená čárkami – viz později), či o soubory, které obsahují přímo SQL příkazy. Soubor s SQL příkazy vzniká například při exportu dat z MySQL (viz minulý díl).

Import SQL příkazů

Začněme tím nejjednodušším, a to importem souboru s SQL příkazy. Uvedu příklad. Máte soubor zaloha.sql, který obsahuje SQL příkazy, a ty chcete provést – neboli promítnout obsah těchto souborů do databáze. Pro správné vykonání těchto příkazů je potřeba přesměrovat tento soubor na program mysql. To se provede následujícím způsobem:

mysql –u root –p <zaloha.sql

Takto zadaným příkazem se nespustí MySQL Monitor, jak by se mohl leckdo domnívat, nýbrž se provedou SQL příkazy uvedené v souboru zaloha.sql a po vykonání program skočí zpět na příkazovou řádku. Následně si pak pomocí spuštěného MySQL Monitoru můžete ověřit, jestli byla data skutečně importována.

(Poznámka: Tento způsob importu se může leckomu zdát trochu zmatený, ale věřte, že je velice účinný.)

Import CSV souborů

Dříve než začnu povídat o importu CSV souborů, měl bych vysvětlit, co to vlastně ty CSV soubory jsou. Jedná se o soubory v textové podobě, v nichž jsou jednotlivé záznamy oddělovány určitým znakem – nejčastěji čárkou. Takovýto soubor může vypadat třeba následovně:

1,"Petr","Novák",
2,"Aleš","Hofman",

Z předchozích řádků je patrné, že daný soubor obsahuje pouze data – tedy nikoliv syntaxi pro tvorbu tabulek apod. Tato data můžete importovat do již existující tabulky pomocí příkazu mysqlimport, který podobně jako mysqldump obsahuje řadu přepínačů. Přehled těch nejzákladnějších naleznete v následující tabulce:

Přepínač Popis
-d Před začátkem importu odstraní všechna data z tabulky, do které bude import proveden.
-f Tento přepínač zajistí, že import bude pokračovat, i když dojde k nějaké chybě.
-h [název serveru] Nastaví název SQL serveru, kterému budete importovat data. Standardně je nastaven localhost.
-i Zajistí, aby byly ignorovány všechny záznamy, které mají stejný jedinečný klíč.
-l Na dobu importu uzamkne všechny tabulky, do kterých se bude importovat.
-L Příkaz mysqlimport použije při importu soubor z místního počítače. Nemusí jej proto nejdříve stahovat.
-r Nahradí v tabulce záznam, jehož jedinečná hodnota se shoduje. Opak přepínač –i.
--fields-enclosed-by=znak Znak, který uzavírá data polí. Standardně mysqlimport předpokládá, že nejsou uzavřena do žádných znaků, ale většinou se setkáte s tím, že jsou uzavřena do uvozovek.
--fields-escaped-by=znak Nastaví, který znak bude používán jako znak ukončení. Mysqlimport standardně neočekává žádný znak.
--fields-terminated-by=znak Určuje znak, který bude používán jako oddělovač jednotlivých polí. Většinou je tento znak čárka, ale mysqlimport implicitně očekává tabulátor.
--lines-terminated-by=znak Znak, která ukončuje záznam. Mysqlimport očekává implicitně znak nového řádku.

Nyní tedy využijeme těchto přepínačů a sestavíme následující příkaz:

mysqlimport –u root –p --fields-enclosed-by=" --fields-terminated-by=, Pokus uzivatele.txt

K vysvětlení předcházejícího řádku. Voláte příkaz mysqlimport hned s několika přepínači. Ty první slouží k přihlášení k SQL serveru (pro import potřebujete patřičná práva), následně pomocí přepínače –fields-enclosed-by nastavujete, že jednotlivé záznamy budou uzavřeny do uvozovek a následný přepínač – fields-terminated-by nastavuje, jakým znakem budou od sebe oddělována jednotlivá pole. Předposlední údaj příkazu značí název databáze, do které budete importovat data. Aby bylo patrné, do které tabulky se mají data importovat, je nutné podle příslušné tabulky pojmenovat soubor. Z tohoto příkladu je patrné, že soubor uzivatele.txt bude importován do tabulky uzivatele.

Tak to by bylo pro dnešek vše. Jak vidíte, importování dat není v tom základním podání nic složitého a jedná se vesměs o rutinní záležitost. V příštím díle vám tedy povím něco málo o základních vestavěných funkcích.

Diskuze (10) Další článek: MusicCity ve sporu se zábavním průmyslem

Témata článku: , , , , , , , , , , , , , , ,