V minulém díle jsme se seznámili se způsobem, jakým se do databází ukládají údaje ve formě tabulek. Dnes si ukážeme, jak můžeme s tabulkami a s údaji v nich obsaženými manipulovat.
Víme, že přístup k údajům uloženým v databázi obstarává SŘBD. Aby mohly být údaje z databáze přístupné ostatním aplikacím, musí SŘBD nabízet rozhraní, pomocí kterého s ním mohou spolupracovat ostatní programy.
Způsob komunikace se SŘBD je velice obdobný komunikaci s WWW-serverem. Dnes je SŘBD nejčastěji nepřetržitě spuštěn jako démon (na Unixu) nebo jako služba (ve Windows NT) a na určitém socketu očekává požadavky klientů (ostatních aplikací). Na tyto požadavky pak odpovídá. Vidíme tedy, že i zde funguje osvědčený model klient/server. V roli serveru je nyní SŘBD a někdy se mu proto také říká databázový server.
Pro zápis požadavků na databázový server se nejčastěji používá jazyk SQL (Structured Query Language). Tento jazyk prošel dlouhým vývojem a v různé míře jej dnes podporují téměř všechny běžně používané databázové servery. Někdy se proto databázovým serverům říká zjednodušeně SQL-servery. Jazyk SQL nabízí vše potřebné pro vytváření, modifikování a rušení tabulek a pro práci s údaji v tabulce -- vyhledávání, přidávání, modifikování a mazání údajů.
![]() |
Jak to vše souvisí s naší tvorbou webových aplikací? V roli klienta pro SQL-server může samozřejmě vystupovat i skript zapsaný v PHP a ASP. To znamená, že naše skripty mohou obsahovat příkazy zapsané v jazyce SQL a zpracovávat jejich výsledky po provedení na SQL-serveru. Nic již tedy nebrání tomu, aby byl přes Web zpřístupněn obsah nějaké databáze.
V praxi je vše samozřejmě o něco složitější. Každý SQL-server má svůj vlastní protokol, kterým s ním může klient komunikovat. Pokud má klient umět komunikovat s více různými servery, musí podporovat více protokolů. To není zrovna nejšťastnější řešení a proto na platformě Windows vzniklo rozhraní ODBC. To slouží jako prostředník mezi klientskou aplikací a databázovým serverem. Rozhraní ODBC se volá jednotně a ODBC-ovladač pak požadavek předá databázovém serveru pomocí správného protokolu.
V PHP i ASP může k připojení k SQL-serveru používat rozhraní ODBC. PHP navíc nabízí pro některé servery přímou podporu -- přístup k datům je pak obvykle rychlejší. Mezi přímo podporované databáze mimo jiné patří Oracle, Sybase, Solid, MySQL a PostgreSQL.
Zanechme však teoretických úvah a pusťme se do seznamování s jazykem SQL. Abychom si mohli SQL vyzkoušet, budeme potřebovat nějaký SQL-server. To může být trochu problém, protože cena komerčních serverů je přímo astronomická. My proto sáhneme po serveru MySQL, jehož unixová verze je k dispozici zdarma a verze pro Windows za cenu, která je v porovnání s komerčními servery směšná. Domovskou stránku MySQL naleznete na adrese http://www.tcx.se/. Pro stahování programu však použijte zrcadlo umístěné v Čechách na adrese http://mirror.opf.slu.cz/mysql/.
Po nainstalování MySQL musíme spustit jeho serverovou část pomocí
příkazu mysqld. V Unixu a Windows NT se nám asi vyplatí
spustit MySQL jako démona/službu. Nyní se již můžeme k serveru připojit
pomocí jednoduchého řádkového klienta mysql (ve Windows
verzi nalezneme spustitelné soubory v adresáři \mysql\bin).
Jako parametr je nutno uvést jméno databáze, ke které se chceme
připojit. Při instalaci se standardně vytvoří databáze
test, do které mají všichni uživatelé přístup -- výborně se
tedy hodí pro naše účely seznamování s jazykem SQL. MySQL spustíme
pomocí příkazu:
mysql testNyní si pomocí příkazu
help můžeme prohlédnout příkazy,
které máme k dispozici (viz obr. 2).
![]() |
Pro nás je důležitý příkaz quit, kterým ukončíme práci s
klientem. Kromě zobrazených příkazů můžeme zadat libovolný příkaz v
jazyce SQL. Pojďme se s nimi tedy postupně seznámit.
CREATE
TABLE. Jeho syntaxe je následující:
CREATE TABLE jméno_tabulky (jméno_položky typ_položky, ... )Přehled nejpoužívanějších datových typů si můžeme prohlédnout v tabulce 1.
| Typ | Popis |
|---|---|
int | celé číslo |
float | číslo s pohyblivou řádovou čárkou |
varchar(n) | textový řetězec o maximální délce n |
date | datum ve tvaru RRRR-MM-DD
|
time | čas ve tvaru HH:MM:SS
|
Pro vytvoření tabulky Zaměstnanci z předchozího dílu
seriálu můžeme použít následující SQL příkaz:
CREATE TABLE Zamestnanci ( OsobniCislo int NOT NULL, Jmeno varchar(40), RC varchar(11), Adresa varchar(60), Plat float, PRIMARY KEY (OsobniCislo) );Názvy všech tabulek a položek je lepší zadávat bez diakritických znamének, protože ne všechny servery si zde s češtinou poradí. Za definicí typu osobního čísla musíme uvést direktivu
NOT
NULL, která říká, že atribut nemůže obsahovat prázdnou hodnotu.
Tato podmínka musí platit pro všechny primární klíče. Předposlední řádka
příkazu definuje atribut OsobniCislo jako primární klíč
tabulky.
Při zadávání příkazů v programu mysql nesmíme zapomenout
za každým příkazem zadat středník. Příkaz je odeslán na server až po
zadání středníku a následném stisknutí klávesy Enter.
mysql můžeme do tabulky přidávat i nové
záznamy. K přidání nového záznamu do tabulky s N atributy
slouží v SQL příkaz INSERT INTO:
INSERT INTO jméno_tabulky
VALUES (hodnota1, ..., hodnotaN)
My do tabulky přidáme informace o panu Novákovi:
INSERT INTO Zamestnanci VALUES ( 1023, 'Novák Jan', '561220/0235', 'Levá 13, Praha 4', 12000);Textové řetězce musíme uzavírat do apostrofů nebo do uvozovek. Na obrázku 3 si můžeme prohlédnout, jak na přidání záznamu zareaguje
mysql. Dozvíme se, že dotaz byl v pořádku, ovlivnil jednu
řádku a provedl se za 8 setin sekundy.
Obdobným způsobem můžeme přidat i další záznamy. Vidíme, že tento způsob není zrovna dvakrát uživatelsky příjemný -- dobrá motivace pro vytvoření snadno ovladatelného WWW rozhraní k tabulce.
![]() |
SELECT.
Pokud chceme vypsat obsah celé tabulky, zadáme příkaz:
SELECT * FROM jméno_tabulkyObsah naší tabulky si tedy můžeme ověřit pomocí:
SELECT * FROM Zamestnanci;Na obrázku 3 vidíme, že obsah tabulky je úhledně zformátován a navíc se dozvíme, kolik záznamů dotazu vyhovuje.
Informace lze vybírat i selektivně. Podmínka, která musí pro vybrané
záznamy platit, se uvádí za klíčové slovo WHERE. Příklady
selektivních dotazů:
SELECT * FROM Zamestnanci WHERE Jmeno LIKE 'Novák Jan';Vybere všechny zaměstnance, jejichž jméno je 'Novák Jan'.
SELECT * FROM Zamestnanci WHERE Jmeno LIKE 'Nov%';Znak '
%' má ve vyhledávacím řetězci za operátorem
LIKE speciální význam -- nahrazuje libovolnou sekvenci
znaků. Dotaz tedy vybere všechny zaměstnance, jejichž jméno začíná na
Nov.
SELECT * FROM Zamestnanci WHERE OsobniCislo = 1230;Vybere zaměstnance s osobním číslem 1230. A konečně
SELECT * FROM Zamestnanci WHERE Plat > 10000;vybere všechny, jejichž plat převyšuje 10000 Kč.
V podmínkách můžeme používat i logické spojky AND a
OR. Pokud nás zajímají všichni Nováci, jejichž plat je
menší než 6000 Kč, můžeme použít dotaz:
SELECT * FROM Zamestnanci
WHERE Jmeno LIKE 'Novák %'
AND
Plat < 6000;
Za příkazem SELECT nemusíme uvádět jen hvězdičku. Místo ní
můžeme použít seznam atributů, které chceme mít ve výsledku zobrazeny.
Hvězdička má speciální význam a zastupuje všechny atributy.
Zajímají-li nás jména a platy zaměstnanců, kteří mají plat větší než 15000 Kč, můžeme použít následující dotaz:
SELECT Jmeno, Plat FROM Zamestnanci WHERE Plat > 15000
Příště se podíváme na další SQL příkazy, které nám umožňují mazání a modifikaci záznamů v tabulce. Pak si již konečně ukážeme, jak začlenit SQL-příkazy do našich skriptů.