2. díl - MySQL krok za krokem: Vytvoření databáze a tabulky

MySQL MySQL krok za krokem: Vytvoření databáze a tabulky

V minulém dílu seriálu tutoriálů o MySQL databázi jsme si řekli něco o relačních databázích a připravili jsme si prostředí. Dnes si vytvoříme databázi a do ní nějakou tabulku.

Vytvořme si databázi, obvykle nám pro jeden projekt (web) postačí jedna databáze.

Klikněme v phpMyAdmin nahoře na záložku Databáze. Vyplníme název databáze (např. databaze_pro_web). V databázích je zvykem pojmenovávat položky bez diakritiky, malými písmeny a s podtržítkovou notací. Snad vám je jasné, proč není diakritika dobrý nápad, za velkými a malými písmeny je Linux, který je rozlišuje a většina serverů právě na Linuxu běží. Porovnávání nastavíme na utf8_czech_ci (pro slovenštinu utf8_slovak_ci). Je velmi dobrý nápad nastavit databázi právě na toto standardní kódování. I kdyby samotná aplikace, která s databází komunikuje, používala jiné kódování, lze ho později snadno vynutit a data budou poté databází do tohoto kódování převáděna. Stejně ale většinou budeme používat utf8 i v naší aplikaci, která s databází komunikuje. Potvrdíme.

Vytvoření MySQL databáze

Tento krok za nás již na webhostingu téměř vždy udělali a dostaneme k dispozici často právě jednu databázi, která se jmenuje stejně, jako náš účet (tedy třeba něco jako mojewebovastran­ka.cz1). Máme vše připraveno k tomu, abychom se mohli začít učit jazyk SQL.

Jazyk SQL

SQL označuje Structured Query Language, tedy strukturovaný dotazovací jazyk. SQL je tzv. jazyk deklarativní. Zatímco u imperativních jazyků počítači vlastně říkáme krok po kroku co má udělat, u jazyků deklarativních pouze říkáme co má být výsledkem a již nás nezajímá, jak tohoto výsledku počítač dosáhne. Díky tomu jsou databázové dotazy zjednodušeny na příkaz typu "Vrať mi 10 uživatelů s nejvyšším hodnocením". Databáze takový dotaz pochopí, rozloží si ho na nějaké své instrukce a tak jej zpracuje. Nám poté opravdu vrátí výsledek, aniž bycom tušili, jak k němu došla. Pokud vám příkaz přišel jako nadsázka, tak tomu tak není a příkazy opravdu takto vypadají. Jen jsou anglicky.

SQL se původně jmenovalo SEQUEL (Structured English Query Language) a vzniklo v laboratořích společnosti IBM s cílem vytvořit jazyk, kterým by se dalo komunikovat s databází jednoduchou angličtinou. SQL (relační) databáze se poté rozšiřovaly a ujaly. Dnes se prakticky nic jiného nepoužívá a i když má SQL v objektovém programování značné nevýhody, firmám se nechce přecházet na nic jiného (i když existují alternativní řešení). Ale to jsme odbočili.

Naklikáním databáze nám phpMyAdmin vygeneroval a spustil příkaz v SQL, který vytvořil novou databázi. Vypadal by asi takto:

CREATE DATABASE `databaze_pro_web` CHARACTER SET utf8 COLLATE utf8_czech_ci;

Části CREATE DATABASE asi rozumíme, CHARACTER SET nastavuje znakovou sadu, COLLATE tzv. porovnávání. Znaková sada je soubor znaků, které může databáze obsahovat, porovnávání se většinou váže ke znakové sadě a určuje, jak se znaky za sebe řadí, tedy české "Č" je po "C" a tak dále. Oboje nastavíme na UTF8, u porovnávání upřesníme, že chceme češtinu (případně slovenštinu).

V SQL se většinou píší příkazy velkými písmeny, to proto, že je to lépe odliší od zbytku dotazu nebo od kódu naší aplikace (např. v PHP). Názvy tabulek, sloupců a další identifikátory jsou naopak malými písmeny a podtržítkovou notací. Je dobrým zvykem je vkládat mezi zpětné apostrofy (na QWERTY klávesnici AltGt + klávesa pod escape, na anglické jen ta klávesa).

Zkuste si databázi odstranit (ikona Domečeku v levém panelu -> záložka Databáze -> zaškrtnout políčko u databaze_pro_web a Odstranit).

Odstranění MySQL databáze

Databáze zmizela a vidíme, že nám phpMyAdmin vygeneroval další dotaz (většinou nám ho po kliknutí ukáže), který zněl:

DROP DATABASE `databaze_pro_web`;

"Zahoď databázi databaze_pro_web", zde asi není co dodávat. Už umíme 2 SQL příkazy, vytvoření databáze a její odstranění. Ani jeden ale v naší aplikaci asi používat nebudeme, protože databázi si stačí vytvořit jen jednou a můžeme to udělat takto jednoduše v administračním nástroji. To samé platí pro tvorbu tabulek. Teprve samotná práce s daty v SQL pro nás bude klíčová, brzy se k ní dostaneme.

Spuštění SQL dotazu

Nyní si databázi opět vytvořme, ale místo nakliknutí zadáme rovnou SQL dotaz. V horní liště klikneme na položku SQL. Otevře se nám okno, kam můžeme psát přímo SQL dotazy. Vložíme tam náš dotaz pro vytvoření databáze (viz výše) a dotaz provedeme:

SQL dotaz v phpMyAdmin

Vidíme, že jsme docílili stejného výsledku, jako když jsme tabulku naklikli. Databázi si v levém sloupci otevřete. phpMyAdmin nám nabízí vytvoření tabulky. Vzpomeneme si na příklad tabulky uživatelů, co jsme si ukázali v minulém dílu. Měla sloupce jméno, příjmení, datum narození a počet článků. Již jsme nakousli, že by každá tabulka měla mít sloupec, jehož hodnota je pro každou položku unikátní. Sloupců bude tedy dohromady 5, tabulka se bude jmenovat uzivatele. Hodnoty zadejme do phpMyAdmina:

Vytvoření tabulky v phpMyAdmin

Otevře se nám opravdu hodně polí, ale těch se vůbec nelekejte. První sloupec jsou jména sloupců tabulky. Vyplníme pod sebe tedy názvy našich sloupců, což jsou: uzivatele_id, jmeno, prijmeni, datum_narozeni, a pocet_clanku. Id se mi osvědčilo pojmenovávat s prefixem tabulky, ale není to nutné.

Přesuňme se k 2. sloupci, kde jsou datové typy jednotlivých sloupců tabulku. Přednastavený máme INT, což jsou celá čísla. Typů je opravdu mnoho, ale my si dlouho (asi až do konce seriálu) vystačíme jen s několika. uzivatele_id ponecháme na INT, jmeno a prijmeni nastavíme na VARCHAR, to je krátký text. Datum narození na DATE. Poslední, pocet_clanku, bude typu INT. Časem si popíšeme i další datové typy, ale teď vám s nimi nebudu motat hlavu :)

3. sloupec Délka/množina má smysl jen u VARCHARU a udává maximální počet jeho znaků, jméno i příjmení nastavíme na 60 znaků.

Dále máme další sloupce, které pro nás však nejsou tak důležité a nebudeme je vyplňovat. Poslední, co vyplníme, je sloupec Klíč u sloupce s uzivatele_id. Klíč zde nastavíme na PRIMARY a zaškrtneme pole vedle, které je nadepsáno A_I (jako Auto Increment). Tímto jsme sloupec uzivatele_id nastavili jako tzv. primární klíč tabulky. Klíče (někdy indexy) nám umožňují identifikovat položku v tabulce. Takový primární klíč by měla mít každá tabulka (i když teoreticky nemusí). Když budeme chtít uživatele např. vymazat, vymažeme ho podle tohoto klíče (tedy podle uzivatele_id). Kdybychom ho mazali podle jména, smazali bychom několik položek, protože třeba Janů Nováků tam může být více. Podle uzivatele_id vymažeme vždy jen toho jednoho. Zaškrtnutí Auto Increment způsobilo, že se bude hodnota uzivatele_id automaticky navyšovat a uživatelé se budou postupně číslovat.

Mimochodem, všimněte si možnosti Přidat pole, to je pokud jich na začátku zadáme málo a při návrhu tabulky zjistíme, že potřebujeme další. Tabulku uložíme.

Vytvoření tabulky v phpMyAdmin

Tabulka se nám objeví v levém sloupci, můžeme ji rozkliknout, ale zatím je prázdná. SQL dotaz pro vytvoření tabulky by vypadal takto:

CREATE TABLE `uzivatele` (
  `uzivatele_id` int AUTO_INCREMENT,
  `jmeno` varchar(60),
  `prijmeni` varchar(60),
  `datum_narozeni` date,
  `pocet_clanku` int,
  PRIMARY KEY (`uzivatele_id`)
);

První řádek je jasný, na dalších řádcích se definují jednotlivé sloupce tabulky a jejich datový typ. U varchar k typu uvedeme i počet znaků. AUTO_INCREMENT u uzivatele_id označuje, aby databáze každému novému uživateli přiřadila o 1 větší ID, než měl poslední. Nakonec nastavíme uzivatele_id jako primární klíč tabulky.

Odstranění tabulky je stejné, jako odstranění databáze. V phpMyAdmin ji odstraníte po rokliknutí příslušné databáze, v SQL:

DROP TABLE `uzivatele`;

Zkuste si tabulku dropnout a poté znovu vložit pomocí SQL dotazu. Příště si ji již naplníme nějakými daty :)


 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (14 hlasů) :
55555


 



 

 

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

Avatar
nautil2
Člen
Avatar
nautil2:

Ahoj David Čápka!
Díky za tenhle seriál o MySQL! Dobře se podle něj učí.

Mám podezření na překlep - v úplně prvním SQL příkazu a pak i ve screenshotu z PHPMyAdminu:
Místo <pre>COLLATE utf8_general_ci;</pre> mít <pre>COLLATE utf8_czech_ci;­</pre>. Když už používáme UTF8, tak ať taky řadíme dle české abecedy, ne? ;)

 
Odpovědět 8.10.2013 23:54
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nautil2
David Čápka:

Ahoj, díky, jsem rád, že pomohl. Máš pravdu, má tam být czech. Až budu dělat revizi, tak to přescreenuju :)

Odpovědět 9.10.2013 12:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):

Skutočne je lepšie, keď tam je utf8_czech_ci alebo utf8_sk_ci ako utf8_general_ci?
Napríklad keď budú databázu napĺňať slováci aj češi. Čo je potom vhodnejšie?

Odpovědět 23.2.2014 11:26
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:

czech_ci definuje, že je třeba ž za z. Nemám vyzkoušené co by se přesně špatně řadilo s general, ale něco by to určitě neumělo.

Odpovědět 23.2.2014 11:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):

Díky, teda pre mňa bude najvhodnejšie utf8_slovak_ci.

Odpovědět 23.2.2014 12:09
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Špatně to není, plurál se v DB tabulkách běžně používá, dělá to tak třeba Microsoft. Je to úplně jedno.

Odpovědět 18.3.2014 11:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jip123
Člen
Avatar
jip123:

Na qwertz klávesnici nemůžu najít výše zmíněný "zpětný apostrof". Zná někdo klávesovou zkratku?

 
Odpovědět  +1 20.9.2014 17:30
Avatar
IT Man
Redaktor
Avatar
Odpovědět 20.9.2014 18:26
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
youtubak777
Člen
Avatar
youtubak777:

Ahoj, jaký typ je nejlepší pro uložení IP adresy?

 
Odpovědět 23.4.2015 20:54
Avatar
Odpovědět  +1 23.4.2015 20:55
Nesnáším {}, proto se jim vyhýbám.
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 41. Zobrazit vše