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 Za p°φkazemSELECT
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 > 15000P°φÜ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∙.
© Ji°φ Kosek 1999