6.16. phpMyAdmin - zálohy, funkce, pohledy, spouště

6.16.1. Opakování

1 Stáhněte si přes FTP z fileserveru pomocí účtu anonym soubor mysql04.zip a extrahujte jej tak, aby rozbalený soubor byl ve složce c:\temp\mysql04 FileZilla
2 Editujte v PSPadu soubor c:\temp\mysql04\jprijmeni_funkce.sql a prověřte existenci příkazů pro vytvoření tabulek a vložení řádků (všimněte si i příkazu transakce) PSPad
3 Spusťte z řídícího panelu XAMPP servery Apache a MySQL XAMPP
4 Spusťte phpMyAdmin tlačítkem Admin a všimněte si IP adresy v prohlížeči XAMPP
5 Vytvořte v phpMyAdmin novou databázi jprijmeni_funkce s porovnáváním  utf8_czech_ci, kde jprijmeni nahraďte svým prvním písmenem ze jména a příjmením bez diakritiky phpMyAdmin

6.16.2. Obnova a zálohování databáze - import, export

6 Nastavte novou databázi jako aktuální a importujte soubor c:\temp\mysql04\jprijmeni_funkce.sql do nově vytvořené databáze pomocí záložky Import a proveďte kontrolu načtení dat
7 Nastavte u pole ctenari.foto MIME typ: Image/JPEG a podobně Transformaci při prohlížení na Image/JPEG inline a proveďte kontrolu zobrazení obrázků v režimu Projít
8 Najděte a poznamenejte si primární klíče čtenáře Aloise Kalaše a knih Markéta Lazarová a Válka s mloky
9 Zaevidujte tomuto čtenáři výpůjčky těchto dvou knih s dnešním datem
10 Vypište aktuální výpůjčky dotazem (vrácené knihy se nevypisují):
select nazev,autor,pujceno,jmeno from knihy join vypujcky on knihy.id_knihy=vypujcky.id_knihy join ctenari on ctenari.id_ctenar=vypujcky.id_ctenar where vypujcky.vraceno is null
11 Přejděte do menu na úrovni databáze jprijmeni_funkce a proveďte export databáze s vlastním nastavením (vypněte komentáře, přidejte transakci) do souboru c:\temp\mysql04\jprijmeni_export.sql pomocí záložky Export (jprijmeni nahraďte jako obvykle) - proveďte kontrolu existence a obsahu souboru ve složce

6.16.3. Funkce, seskupování pomocí GROUP BY

12 Vypište celkový počet výpůjčených knih:
select count(*) from vypujcky where vraceno is null;
13 Vypište jména čtenářů a u každého uveďte počet výpůjček (včetně vrácených):
select jmeno, count(*) from ctenari join vypujcky on ctenari.id_ctenar=vypujcky.id_ctenar group by jmeno
14 Příkaz upravte, aby se výpis řadil podle počtu výpůjček sestupně:
..., count(*) as pocet ... order by pocet desc;
15 Vypište z tabulky knihy názvy knih seřazené od nejkratších názvů vzestupně k nejdelším (použijte úpravu SQL dotazu po Projít):
... ORDER BY CHAR_LENGTH(nazev)
16 Upravte a proveďte předchozí příkaz, aby se názvy řadily od nejdelších názvů sestupně k nejkratším (sestupně)
17 Proveďte profilování (zaškrtávátko vpravo pod SQL příkazem) a rozeberte výsledek
18 Upravte SQL dotaz tak, aby se názvy delší než 18 znaků vypisovaly zkrácené na 15 znaků a byly doplněny 3 tečkami:
SELECT if (char_length(nazev)>18,concat(left(nazev,15),'...'),nazev) FROM knihy
ORDER BY char_length(nazev) DESC

Další podobné funkce - např.

19 Vypište pomocí funkce rand() náhodný název knihy z tabulky knihy:
... ORDER BY rand() ...

Datum a čas

20 Změňte u dvou vybraných výpůjček datum půjčení na datum před 7 dny
21 Vypište kolik dnů je každá kniha vypůjčená:
SELECT nazev, autor, pujceno, DATEDIFF( NOW( ) , pujceno ) AS pujceno_dnu
FROM knihy
JOIN vypujcky ON knihy.id_knihy = vypujcky.id_knihy
WHERE vraceno IS NULL

Další příbuzné funkce - např.

6.16.4. Views - pohledy

22 Vytvořte pohled pujceno_dnu z předchozího dotazu, ke kterému přidejte výpis jmen čtenářů:
SELECT nazev, autor, pujceno, DATEDIFF( NOW( ) , pujceno ) AS pujceno_dnu, jmeno
FROM knihy
JOIN vypujcky ON knihy.id_knihy = vypujcky.id_knihy
JOIN ctenari ON ctenari.id_ctenar = vypujcky.id_ctenar
WHERE vraceno IS NULL
23 Ověřte funkčnost pohledu jeho vybráním ze stromu vlevo a výpis uložte pomocí Náhledu pro tisk jako pujceno_dnu.pdf

6.16.5. Triggery - spouště

Příklad logování pomocí spouště

24 Vytvořte v databázi jprijmeni_funkce tabulku log s poli id_log (INT primary key AI), popis (TEXT), datum_logu (TIMESTAMP)
25 Vytvořte spoušť (Spouště - Přidat spoušť) pro logování změn jmen čtenářů:
Název spouště: trigger_update_ctenar
Tabulka: ctenari
Spouštění: AFTER UPDATE
Definice: INSERT INTO log (popis) VALUES (concat('Update čtenáře: ',old.jmeno,' na ',new.jmeno))
26 Prověřte logování změnou jmen alespoň dvou čtenářů a výpisem (procházením) tabulky log - výpis tabulky log uložte pomocí Náhledu pro tisk jako log.pdf
27 Vytvořte dokumentaci k databázi jprijmeni_funkce ve formě dokumentu c:\temp\mysql04\funkce.pdf (pomocí záložky Struktura na úrovni databáze a odkazu Datový slovník) Struktura - Datový slovník - Náhled pro tisk
28 Soubory jprijmeni_export.sql + 3x PDF (pujceno_dnu, log, funkce) ze složky c:\temp\mysql04 uložte na fileserver do nově očíslované složky FileZilla