Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
C# .NET + discount 30

Lekce 4 - MySQL krok za krokem: Export

V minulé lekci, MySQL krok za krokem: Vkládání a mazání dat v tabulce, jsme si ukázali vkládání a mazání záznamů.

Dnes si vyzkoušíme vyexportovat databázi, která se nám bude jistě mnohokrát hodit.

Export

Export (nebo také "záloha") je soubor se SQL příkazy, která nám může sloužit na zálohu, migraci či na import databáze.

Export můžeme rozdělit na:

  • kompletní export - soubor bude obsahovat jak strukturu tabulek, tak i jejich data
  • export struktury - soubor bude obsahovat pouze strukturu databáze
    • takový export může obsahovat klidně všechny nebo pouze vybrané tabulky
  • export dat - soubor bude obsahovat pouze data tabulek
    • jaké tabulky můžeme také specifikovat

Takto rozdělit můžeme i typy importů, jelikož tento soubor budeme pravděpodobně importovat.

Naposled jsme vymazali všechny data databáze, v phpMyAdmin bychom měli mít pouze jednu prázdnou tabulku uzivatele:

Stávající databáze

Nejprve musíme nějaká data vložit do databáze, abychom je mohli exportovat. Pokud jste je v minulé lekci smazali, můžeme si znova pár záznamů z minulé lekce vložit tímto SQL příkazem:

INSERT INTO `uzivatele` (
    `jmeno`,
    `prijmeni`,
    `datum_narozeni`,
    `pocet_clanku`
)
VALUES ('Jan', 'Novák', '1984-11-03', 17),
       ('Tomáš', 'Marný', '1989-02-01', 6),
       ('Josef', 'Nový', '1972-12-20', 9);

Máme v databázi tedy tři záznamy osob:

Databáze s daty

Export dat

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Zkusme si nejprve exportovat data konkrétní tabulky. Můžeme to nejjednodušeji udělat tak, že klikneme na konkrétní tabulku vlevo v navigaci a poté klikneme na tlačítko Export v horní liště:

Export

Po kliknutí na tlačítko Export uvidíme toto okno:

Jednoduchý export

Tento způsob exportu je rychlý a také vhodný, pokud nepotřebujeme specifikovat například znakovou sadu, kompresi souboru, doplňovací příkazy a další podrobnosti. Můžeme u tohoto způsobu specifikovat formát souboru exportu:

  • CSV - využívá se často pro export do programu MS Excel, data jsou oddělená čárkou
  • JSON - hojně se využívá v JavaScriptu a API webových aplikací
    • XML, PHP array a další.

Nám bude stačit formát SQL, který je nastaven jako výchozí. Pro budoucí export je také nejvhodnější. Níže můžeme specifikovat řádky, které chceme exportovat. Zkusíme si vyexportovat tedy všechny záznamy kromě prvního. Pole pro "Začít od řádku" nastavíme tedy na číslo 1 a klikneme na tlačítko Proveď vpravo dole.

Začne stažení souboru, pokud si ho otevřeme v textovém editoru, jeho obsah bude takovýto:

-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Počítač: 127.0.0.1:3306
-- Vytvořeno: Pon 05. říj 2020, 13:48
-- Verze serveru: 5.7.31
-- Verze PHP: 7.3.21

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Databáze: `databaze_pro_web`
--

-- --------------------------------------------------------

--
-- Struktura tabulky `uzivatele`
--

DROP TABLE IF EXISTS `uzivatele`;
CREATE TABLE IF NOT EXISTS `uzivatele` (
  `uzivatele_id` int(11) NOT NULL AUTO_INCREMENT,
  `jmeno` varchar(60) COLLATE utf8_czech_ci NOT NULL,
  `prijmeni` varchar(60) COLLATE utf8_czech_ci NOT NULL,
  `datum_narozeni` date NOT NULL,
  `pocet_clanku` int(11) NOT NULL,
  PRIMARY KEY (`uzivatele_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

--
-- Vypisuji data pro tabulku `uzivatele`
--

INSERT INTO `uzivatele` (`uzivatele_id`, `jmeno`, `prijmeni`, `datum_narozeni`, `pocet_clanku`) VALUES
(2, 'Tomáš', 'Marný', '1989-02-01', 6),
(3, 'Josef', 'Nový', '1972-12-20', 9);
COMMIT;

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;

Úplně na začátku máme informace o tom, z jaké IP exportujeme, jaká je verze MySQL a PHP, kdy jsme soubor vyexportovali a další.

Zeleně máme označené komentáře, čili řádek komentujeme pomocí dvou pomlček --. Vše, co bude za těmito pomlčkami na stejném řádku již bude komentář. Víceřádkové komentáře začneme pomocí znaků /* a ukončujeme pomocí */, jak to můžeme znát z většiny programovacích jazyků.

Dále zde máme SQL příkazy jdoucí po sobě tak, jak se vykonají při importu. Můžeme si všimnout, že tabulku nejdříve dropneme (odstraníme) a poté vytváříme novou. Ztratíme tak tedy všechny stávající data. Toto chování může být často nežádoucí a proto exportujeme mnohdy pouze data bez struktury tabulky.

Tento soubor si zatím ponechte, využijeme ho pro budoucí import :)

Pokud chceme exportovat pouze data, postup je stejný, pouze vybereme Způsob exportu vlastní a specifikujeme pouze data pod sekcí "Parametry pro výstupní formát":

Pokud databázi exportujeme, budeme mít v souboru exportu tento výstup:

-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Počítač: 127.0.0.1:3306
-- Vytvořeno: Pon 05. říj 2020, 14:00
-- Verze serveru: 5.7.31
-- Verze PHP: 7.3.21

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Databáze: `databaze_pro_web`
--

--
-- Vypisuji data pro tabulku `uzivatele`
--

INSERT INTO `uzivatele` (`uzivatele_id`, `jmeno`, `prijmeni`, `datum_narozeni`, `pocet_clanku`) VALUES
(2, 'Tomáš', 'Marný', '1989-02-01', 6),
(3, 'Josef', 'Nový', '1972-12-20', 9);
COMMIT;

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;

Tento soubor můžete smazat, potřebovat ho už nebudeme.

Export celé databáze

Máme zde příkaz pro vkládání dat (INSERT), neobsahuje však příkaz pro vytvoření databáze a před importem tohoto souboru je nutné mít databázi vytvořenou. Pokud bychom chtěli mít v exportu celou databázi, musíme kliknout vlevo na konkrétní databázi a poté kliknout na Export. Musíme vybrat Vlastní způsob exportu a níže pod hlavičkou Nastavení vytváření objektů přidat příkazy Přidat příkaz CREATE DATABASE / USE. Tímto se nám do exportu vloží na začátek tvorba databáze a ten, kdo bude exportovat, nemusí databázi ručně vytvářet a přemýšlet, jaké by mělo mít porovnávání (collation). Můžeme si také určit, jaké tabulky chceme importovat.

Export několika databází najednou

Abychom měli možnost vyexportovat všechny databáze najednou, je třeba navigovat na hlavní stránku phpMyAdmin a klasicky kliknout na tlačítko Export. Vybereme vlastní způsob exportu, ať máme možnost specifikovat databáze, které chceme vyexportovat:

Export databází

Je dobré poté zase navigovat níže a zajistit, ať se do exportu přidají příkazy pro tvorbu těchto databází.

V další lekci, MySQL krok za krokem: Import, si ukážeme import databáze.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 246x (1.47 kB)

 

Předchozí článek
MySQL krok za krokem: Vkládání a mazání dat v tabulce
Všechny články v sekci
MySQL/MariaDB databáze krok za krokem
Přeskočit článek
(nedoporučujeme)
MySQL krok za krokem: Import
Článek pro vás napsal Samuel Hél
Avatar
Uživatelské hodnocení:
79 hlasů
Autor se věnuje hlavně programování, nejvíce z oblasti webových technologií, dělá občasné video edity ze svých dovolených. Má rád memes, svou gf a elektroniku
Aktivity

 

 

Komentáře
Zobrazit starší komentáře (1)

Avatar
Marek Škorpil:31. ledna 13:50

Ahoj, měl bych dotaz. Jak tak promazávám v tabulce a vkládám hodnoty znovu, číslování primárního klíče nejde znovu od 1 ale pokračuje. Jak nastavím, že když z tabulky odmažu data tak bude to číslování znovu od 1? díky

 
Odpovědět
31. ledna 13:50
Avatar
Samuel Hél
Tým ITnetwork
Avatar
Odpovídá na Marek Škorpil
Samuel Hél:31. ledna 14:43

Ahoj, pokud odstraňuješ pomocí příkazu DELETE FROM tabulka, odstraní se data ale AUTO_INCREMENT pokračuje. Pokud odstraníš tabulku pomocí příkazu TRUNCATE TABLE tabulka, odstraní se data a resetuje i počítač AUTO_INCREMENT. Pokud máš už nějaké data v tabulce a nechceš o ně přijít, lze AUTO_INCREMENT ručně nastavit pomocí příkazu ALTER TABLE tabulka AUTO_INCREMENT = X;, kde X je hodnota, od které začne znovu počítat.

 
Odpovědět
31. ledna 14:43
Avatar
 
Odpovědět
31. ledna 15:57
Avatar
Dominik Bican:25. března 7:15

Ahoj, mám problém s exportem.
Když nastavím, co chci exportovat a dám "proveď", tak se v prohlížeči ve stahovaných souborech objeví "chyba sítě" a soubor zkrátka není do počítače stažen. Připojení ale bez problému funguje.
Používám XAMPP Version: 8.1.4, Google Chrome 99.0.4844.82
Díky za pomoc :-)

 
Odpovědět
25. března 7:15
Avatar
Samuel Hél
Tým ITnetwork
Avatar
Odpovídá na Dominik Bican
Samuel Hél:25. března 9:02

Ahoj, s problémem jsem se osobně nesetkal, ale podle Googlu by mělo stačit nastavit zlib.output_compression = Off na zlib.output_compression = On v souboru php.ini

 
Odpovědět
25. března 9:02
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Samuel Hél
Dominik Bican:26. března 14:58

Bohužel to můj problém nevyřešilo. Už googlim všude možně, ale nějak jsem nedostal pro mě jasnou odpověď, čím to může být.

 
Odpovědět
26. března 14:58
Avatar
Odpovídá na Dominik Bican
Jaroslav Drobek:9. dubna 17:56

Mám stejný problém a přepsat php.ini v ubuntu ani po půlhodině šmejdění nedokážu 😒

 
Odpovědět
9. dubna 17:56
Avatar
Jaroslav Drobek:9. dubna 17:56

Hodnocení:

  • Česky: "...nějaká data... jsou oddělená..."
  • Při hromadném exportu databází se příkazy Přidat příkaz CREATE DATABASE / USE nenabízí.
 
Odpovědět
9. dubna 17:56
Avatar
Odpovídá na Jaroslav Drobek
Dominik Bican:9. dubna 20:51

Problém se mi podařilo vyřešit. Zřejmě se stala chyba na straně vývojářů a s novou verzí to blbne. Posílám odkaz, kde úplně rozpitvali soubor core.php a řádek po řádku jsem ho celý překopíroval a přepsal ten stávající. Problém se tím vyřešil :-)
https://github.com/…/17447/files

 
Odpovědět
9. dubna 20:51
Avatar
Odpovídá na Dominik Bican
Jaroslav Drobek:10. dubna 8:32

Díky,
tohle zafungovalo! Nepřepisoval jsem Core.php ručně, ale "vydoloval" ho z phpMyAdmin-5.1+snapshot-all-languages.zip z odkazu v diskuzi.

Pro ostatní lamy, které narazí na podobný, neočekávaný, nový problém: časová dotace do úplného návratu na vlákno lekce (tj. v mém případě ještě +naučit/připomenout změnu práv v Ubuntu atd.): 150 minut netto..

Editováno 10. dubna 8:33
 
Odpovědět
10. dubna 8:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 11. Zobrazit vše