2. diel - MySQL krok za krokom - Vytvorenie databázy a tabuľky
V minulej lekcii, MySQL krok za krokom - Úvod do MySQL a príprava prostredia, sme si povedali niečo o relačných databázach a pripravili sme si prostredie.
V dnešnom MySQL tutoriále si predstavíme jazyk SQL. Potom si vytvoríme databázu a pridáme do nej prvú tabuľku s dátami.
Jazyk SQL
Akronym SQL označuje Structured Query Language, teda štruktúrovaný dopytovací jazyk. SQL je jazyk deklaratívny. To znamená, že počítaču iba hovoríme, čo má byť výsledkom. Už nás nezaujíma, ako tento výsledok počítač dosiahne. Pri imperatívnych jazykoch potom počítaču zadávame krok po kroku inštrukcie, ktoré má vykonať.
Databázové dotazy jazyka SQL potom vyzerajú napríklad takto: "Vráť mi 10 používateľov s najvyšším hodnotením". Databáza takýto dotaz pochopí, rozloží si ho na nejaké svoje inštrukcie a spracuje ho. Nám potom vráti požadovaný výsledok bez toho, aby sme tušili, ako k nemu prišla. Ak vám príkaz prišiel zveličene, tak to tak nie je, príkazy naozaj takto vyzerajú, len sú písané po anglicky.
SQL sa pôvodne volalo SEQUEL (Structured English Query Language) a vzniklo v laboratóriách spoločnosti IBM s cieľom vytvoriť jazyk, ktorým by sa dalo komunikovať s databázou jednoduchou angličtinou. SQL (relačné) databázy sa potom rozširovali a ujali sa. Dnes sa prakticky nič iné nepoužíva a aj keď má SQL v objektovom programovaní značné nevýhody, firmám sa nechce prechádzať na nič iné (aj keď existujú alternatívne riešenia). Ale to sme odbočili.
Práca s databázou v phpMyAdmin
Najprv si ukážeme, ako vytvoriť databázu v nástroji phpMyAdmin. Každý projekt (web) má obvykle jednu databázu, ktorá obsahuje ďalšie tabuľky.
Tento krok za nás v praxi urobí prevádzkovateľ webhostingu a my dostaneme k dispozícii často práve jednu databázu, ktorá sa volá rovnako ako náš účet.
Vytvorenie databázy
Otvoríme si grafické rozhranie phpMyAdmin a klikneme hore na záložku
Databases. Na novej karte vyplníme názov databázy, pomenujeme ju
database_for_web
. Ďalej nastavíme kódovanie databázy na
angličtinu, z ponuky teda vyberieme hodnotu utf8_general_ci
a
klikneme na tlačidlo Create:
Pretože väčšina serverov s databázou používa ako operačný systém Linux, ktorý rozlišuje medzi veľkými a malými písmenami, používame pre názvy databáz iba malé písmená a slová oddeľujeme podčiarkovníkom (snake case notácia).
Odstránenie databázy
Skúsme si teraz databázu odstrániť. Klikneme na ikonu domčeka hore v
ľavej paneli, potom znova na záložku Databases. Následne
zaškrtneme políčko pri názve database_for_web
a klikneme na
možnosť Drop:
Potom sa otvorí dialógové okno, v ktorom potvrdíme, že chceme vybranú databázu zmazať:
Všimnime si SQL príkaz na odstránenie databázy, ktorý je v okne uvedený:
DROP DATABASE `database_for_web`;
Do slovenčiny by sme ho preložili ako: "Zahoď databázu
database_for_web
".
V SQL sa príkazy píšu veľkými písmenami. To preto, že ich to lepšie odlíši od zvyšku dotazu alebo od kódu našej aplikácie. Názvy tabuliek, stĺpcov a ďalších identifikátorov píšeme malými písmenami s podčiarkovníkovou notáciou. Je dobrým zvykom ich vkladať medzi spätné apostrofy alebo tzv. tupý prízvuk.
Tupý prízvuk
Tupý prízvuk na slovenskej klávesnici môžeme napísať pomocou pravého Alt a písmena ý:
Spustenie SQL dotazu
Teraz si databázu opäť vytvoríme, tentoraz však pomocou SQL príkazu. V hornej lište klikneme na položku SQL. Otvorí sa nám okno, kam môžeme priamo písať SQL dotazy.
Vytvorenie databázy
Do nového okna napíšeme príkaz na vytvorenie databázy:
CREATE DATABASE `database_for_web` CHARACTER SET utf8 COLLATE utf8_general_ci;
Časti CREATE DATABASE
asi rozumieme, CHARACTER SET
nastavuje znakovú sadu, COLLATE
upresňuje porovnávanie. Znaková
sada je súbor znakov, ktoré môže databáza obsahovať, porovnávanie sa
väčšinou viaže k znakovej sade a určuje, ako sa znaky za seba radia. V
dotaze máme nastavené utf8
, pri porovnávaní upresňujeme, že
chceme angličtinu. Písmená ci
sú skratkou pre case
insensitive, určujeme tým, že nechceme rozlišovať medzi veľkými a
malými písmenami.
Potom klikneme na tlačidlo Go:
Vidíme, že sme dosiahli rovnaký výsledok.
Ak by sme chceli databázu opäť zmazať, použijeme už spomínaný príkaz:
DROP DATABASE `database_for_web`;
Už ovládame dva SQL príkazy, jeden na vytvorenie databázy a druhý na jej odstránenie. Ani jeden ale v našej aplikácii asi používať nebudeme, pretože databázu si stačí vytvoriť iba raz a môžeme to urobiť takto jednoducho v administračnom nástroji. To isté platí pre tvorbu tabuliek. Až samotná práca s dátami v SQL pre nás bude kľúčová, čoskoro sa k nej dostaneme.
Poďme si ukázať, ako do novej databázy pridať novú tabuľku.
Vytvorenie databázovej tabuľky
Klikneme na názov databázy v ľavom stĺpci a tým ju otvoríme. phpMyAdmin nám zobrazí nové okno pre vytvorenie tabuľky.
Poďme si teda vytvoriť tabuľku používateľov, ktorá bude obsahovať
stĺpce pre meno, priezvisko, dátum narodenia a počet článkov. Na to má
mať každá tabuľka stĺpec, ktorého hodnota je pre každú položku
unikátna. Stĺpcov bude teda dokopy päť. Tabuľku pomenujeme
users
, vyplníme požadovaný počet stĺpcov a potvrdíme:
Otvorí sa nám naozaj veľa polí, ale tých sa neľakajte:
Vľavo najskôr vyplníme pod seba názvy našich stĺpcov, čo sú:
user_id
,first_name
,last_name
,birthdate
,article_count
.
Všimnime si prvý názov, kde máme okrem id
aj prefix
tabuľky. Nie je to nutné, ale ak budeme mať v databáze viacero tabuliek a
každá z nich by mala stĺpec nazvaný iba id
, čoskoro by sme sa
medzi nimi mohli stratiť.
V druhom stĺpci zadávame dátové typy jednotlivých
stĺpcov tabuľky. Prednastavený máme typ INT
reprezentujúci
celé čísla. Dátových typov je v SQL naozaj veľa, väčšinou si však
vystačíme iba s niekoľkými. Na riadku user_id
ponecháme
INT
, first_name
a last_name
nastavíme na
VARCHAR
, to je krátky text. birthdate
nastavíme na
DATE
. Posledný, article_count
, bude opäť typu
INT
.
Ďalší stĺpec, Length/Values, udáva maximálny počet znakov
záznamu. Využijeme ho iba pri type VARCHAR
a meno aj priezvisko
nastavíme na 60 znakov.
Vo štvrtom stĺpci, Default, nastavíme hodnotu NULL
,
ktorá označuje nezadané pre počet článkov. Predpokladáme
totiž, že budeme môcť uložiť používateľa, ktorý žiaden článok ešte
nenapísal.
Ak sme v starších verziách MySQL nezadali dáta pre všetky
stĺpce, databáza do daného poľa automaticky vložila nejakú východiskovú
hodnotu. Od verzie MySQL 5.7 je vypísaná chybová hláška:
Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1364 Field 'xxx' doesn't have a default value
a dotaz sa nevykoná. Ak teda vytvárame stĺpec, ktorý
nemusí mať vždy zadanú hodnotu, je potrebné mu nastaviť nejakú
predvolenú.
Primárny kľúč
Ďalšie stĺpce preskočíme, vyplníme už iba stĺpec Index u
user_id
. Nastavíme tu hodnotu PRIMARY
a zaškrtneme
pole vedľa v stĺpci A_I. Týmto sme stĺpec user_id
nastavili ako primárny kľúč tabuľky. Kľúče, niekedy
nazývané indexy, nám umožňujú identifikovať položku v
tabuľke.
Primárny kľúč by mala mať každá tabuľka. Keď napríklad budeme
chcieť používateľa vymazať, vymažeme ho podľa tohto kľúča, teda podľa
unikátnej hodnoty user_id
. Keby sme ho mazali podľa mena, mohli
by sme zmazať niekoľko položiek, pretože napríklad Jánov Novákov môžeme
mať v databáze viacero. Podľa primárneho kľúča vymažeme vždy iba toho
jedného.
Zaškrtnutím poľa A_I (ako Auto Increment) nastavujeme, že sa
bude hodnota user_id
automaticky navyšovať a ID novo uloženého
používateľa bude vždy o 1 väčšie a teda vždy unikátne.
V hornej časti okna si všimnime možnosť Add field. Ak na začiatku zadáme menej stĺpcov, než potrebujeme, môžeme takto nový stĺpec do tabuľky doplniť.
Takto vyplnenú tabuľku teraz uložíme kliknutím na tlačidlo Save v pravej dolnej časti:
SQL dotaz pre tvorbu tabuľky
Tabuľka sa nám objaví v ľavom stĺpci, môžeme ju rozkliknúť, ale zatiaľ je prázdna:
SQL dotaz pre vytvorenie tabuľky vyzerá takto:
CREATE TABLE `users` ( `user_id` INT NOT NULL AUTO_INCREMENT, `first_name` VARCHAR(60) NOT NULL, `last_name` VARCHAR(60) NOT NULL, `birthdate` DATE NOT NULL, `article_count` INT NULL DEFAULT NULL, PRIMARY KEY (`user_id`) );
Prvý riadok je jasný, na ďalších riadkoch sa definujú jednotlivé
stĺpce tabuľky a ich dátový typ. NOT NULL
nám určuje povinný
údaj. Pri type VARCHAR
je uvedený v zátvorke aj počet znakov.
AUTO_INCREMENT
pri user_id
zaistí, že databáza
každému novému používateľovi priradí unikátne ID. Keďže počet
článkov nemusí mať vždy zadanú hodnotu, máme ho tu ako nepovinný údaj s
východiskovou hodnotou NULL
. Nakoniec tu máme uvedený primárny
kľúč tabuľky.
SQL dotazy pre prácu s tabuľkami nájdeme, keď rozklikneme záložku Console v dolnej časti:
Odstránenie tabuľky
Odstránenie tabuľky je rovnaké ako odstránenie databázy. V phpMyAdmin ju odstránime tlačidlom Drop pri príslušnej tabuľke alebo zadaním SQL príkazu:
DROP TABLE `users`;
Skúste si takto tabuľku odstrániť a potom znova vytvoriť pomocou SQL dotazu.
V budúcej lekcii, MySQL krok za krokom - Vkladanie a mazanie dát v tabuľke, si tabuľku v databáze naplníme nejakými dátami