Chceš se vypracovat až k výdělku 160.000 Kč/měsíc? Důležité je začít. Staň se programátorem díky rekvalifikačnímu kurzu! Začni dnes!
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í.

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

V minulé lekci, MySQL krok za krokem: Úvod do MySQL a příprava prostředí, 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 - MySQL/MariaDB databáze krok za krokem

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;

Veškeré příkazy, které phpMyAdmin vygeneruje, si můžete zobrazit, pokud dole v okně kliknete na tlačítko "Konzole".

Čá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 - MySQL/MariaDB databáze krok za krokem

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 - MySQL/MariaDB databáze krok za krokem

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 - MySQL/MariaDB databáze krok za krokem

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ů.

Od verze MySQL 5.7 je důležité si dávat pozor na 4. sloupec "Výchozí". Pokud jste ve starších verzích při vkládání dat do tabulky nezadali data pro všechny sloupce, MySQL automaticky vložila nějakou výchozí hodnotu. V nových verzích spadne s chybovým stavem: Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1364 Field 'xxx' doesn't have a default value a dotaz se neprovede. Pokud tedy vytváříte sloupec, který nemusí mít vždy zadanou hodnotu, je vhodné mu nastavit nějakou výchozí. Všimněte si, že v našem případě nemusí být při vkládání nového uživatele zadán počet jeho článků právě proto, že výchozí hodnota je nastavena na NULL, která označuje nezadáno.

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 - MySQL/MariaDB databáze krok za krokem

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 rozkliknutí příslušné databáze, v SQL:

DROP TABLE `uzivatele`;

Zkuste si tabulku dropnout a poté znovu vložit pomocí SQL dotazu.

V příští lekci, MySQL krok za krokem: Vkládání a mazání dat v tabulce, si databázi naplníme nějakými daty :)


 

Předchozí článek
MySQL krok za krokem: Úvod do MySQL a příprava prostředí
Všechny články v sekci
MySQL/MariaDB databáze krok za krokem
Přeskočit článek
(nedoporučujeme)
MySQL krok za krokem: Vkládání a mazání dat v tabulce
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
599 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity