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ý dotazovací jazyk. SQL je jazyk deklaratívny. To znamená, že počítač 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é otázky jazyka SQL potom vyzerajú napríklad takto: "Vráť mi 10 užívateľov s najvyšším hodnotením". Databáza takúto otázku pochopí, rozloží si ju na nejaké svoje inštrukcie a spracuje ju. Nám potom naozaj vráti požadovaný výsledok bez toho, aby sme tušili, ako k nemu došla. Pokiaľ vám príkaz prišiel ako nadsadenie, tak to tak nie je, príkazy naozaj takto vyzerajú, len sú písané 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. 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 databázy názvy iba malé písmená s podčiarkovovou (snake case) notáciou.
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íkazu na odstránenie databázy, ktorý je v okne uvedený:
DROP DATABASE `database_for_web`;
Do slovenčiny by sme ich preložili ako: "Zahoď databázu
database_for_web
".
V SQL sa príkazy píšu veľkými písmenami. To preto, že je to lepšie odlíši od zvyšku dotazu alebo od kódu našej aplikácie. Názvy tabuliek, stĺpcov a ďalšie identifikátory píšeme malými písmenami s podtržní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 písať priamo 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 docielili rovnaký výsledok.
Keby sme chceli opäť databázu zmazať, použijeme už spomínaný príkaz:
DROP DATABASE `database_for_web`;
Už vieme 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 uží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ľka 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 vôbec nezľaknite:
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 viac 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ý žiadny
článok ešte nenapísal.
Pokiaľ 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 otázka sa nevykoná. Pokiaľ 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, ktoré je napísané 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 Janov Novákov môžeme
mať v databáze viac. 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
užívateľa bude vždy o 1 väčšia a teda vždy unikátna.
V hornej časti okna si všimnime možnosť Add field. Pokiaľ 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
u user_id
zaistí, že databáza
každému novému užívateľovi priradí o unikátne ID. Keďže počet
článku 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