Základy jazyka SQL
Jazyk SQL je velice jednoduchý a srozumitelný. Jeho syntaxe vychází z angličtiny a příkazy se podobají normálním větám, takže jestli umíte anglicky, máte napůl vyhráno. Jestli ne, nevadí, budu překládat.
Syntaktická pravidla
- Nezáleží na pozicích a "bílém místu" mezi slovy. Můžete naprosto libovolně odsazovat, mezerovat a entrovat. Má to jenom jeden háček: příkaz musíme vecpat do parametru funkce mysql_query, takže ho nakonec budeme muset sesypat na jeden řádek.
- Nezáleží na velikosti písmen v klíčových slovech. Je jedno, jestli napíšeme "SELECT", "select" nebo "SeLecT", fungovat to bude pokaždé stejně. V dalším textu je budu psát velkými písmeny jenom kvůli přehlednosti.
- Identifikátory se normálně skládají z písmen (A..Z, a..z), číslic
(0..9, číslicí mohou i začínat), podtržítek (_) a dolarů ($) a nesmí se
shodovat s klíčovými slovy. Jestli se vám to nelíbí, můžete psát i s
diakritikou a mezerami (jenom to mezerou nesmí končit), mít identifikátor ze
samých čísel nebo i stejný jako nějaké klíčové slovo, ale takové
hrůzy pak musíte uzavírat do
obrácených apostrofů
, aby se z nich systém nezvencnul. Obrácený apostrof se píše na anglické klávesnici takovou tou klávesou úplně vlevo nahoře mezi escapem, jedničkou a tabulátorem. - Jména databází interně odpovídají jménům adresářů a jména tabulek jménům souborů, takže pozor, na linuxových serverech (kterých je mezi freehostingy většina) záleží na velikosti písmen. Jinak pro ně platí všechna pravidla pro identifikátory.
- Pro jména sloupců v tabulkách platí všechna pravidla pro identifikátory a na velikosti písmen u nich nezáleží.
- Řetězce se uzavírají buď do 'apostrofů' nebo do "uvozovek", stejně jako v PHP.
- Příkazy se oddělují středníkem, ale to nás nezajímá, protože mysql_query bere vždycky jenom jeden a středník se za něj nedává.
- Údajně existují tři typy komentářů: #první, -- druhý (oba platí do
konce řádku) a /třetí/, ale v životě jsem je nepotřeboval
.
Vytváření tabulek
Veškerá data v databázi musí být uložena v tabulkách, takže tímhle musíme začít. Příkaz se jmenuje CREATE TABLE (čili "vytvoř tabulku") a pro dříve uvedenou tabulku aut by mohl vypadat třeba takhle:
CREATE TABLE auta ( spz CHAR(8) PRIMARY KEY, typ VARCHAR(30) NOT NULL, majitel TINYTEXT );
Tím jsme řekli, že chceme vytvořit tabulku jménem auta
, ve
které budou sloupce spz
, typ
a majitel
.
U každého sloupce je potřeba uvést datový typ (tedy co se do něj bude
ukládat) a dále mohou následovat další upřesňující informace: že je to
klíč, že nesmí být prázdný apod..
Datové typy
Pro přehlednost tady do dvou tabulek shrnu úplně všechno, s čím se během celého seriálu možná potkáme. Zatím si je jen tak prolítněte; vrátit se sem můžete později, až něco budete potřebovat. Konkrétní použití a podrobnější popisy si stejně probereme na příkladech.
Celá čísla: | |
---|---|
TINYINT | osmibitové číslo |
SMALLINT | 16bitové číslo |
MEDIUMINT | 24b číslo |
INT | 32b |
BIGINT | 64b |
Když za typem uvedeme upřesňující slovo UNSIGNED, čísla budou bez znaménka (tedy přirozená), s rozsahem 0..2počet bitů. Pokud neuvedeme nic, čísla jsou celá se znaménkem a rozsahem posunutým o polovinu do záporna (tedy např. místo 0..255 bude -127..128). | |
Texty: | |
TINYTEXT | max. 255 B |
TEXT | max. 64 KB |
MEDIUMTEXT | max. 224 B |
LONGTEXT | max. 232 B |
VARCHAR(max. počet znaků) | počet znaků jaký si zvolíte, max. 64 KB |
CHAR(počet znaků) | pevný počet znaků jaký si zvolíte, max. 255 |
V ASCII textech platí uvedené maximální délky přímo pro znaky (1 znak = 1 B). V kódování Unicode je potřeba počítat s tím, že jeden znak může zabrat víc bytů. | |
Ostatní: | |
DATE | datum jako textový řetězec ve tvaru 'rrrr-mm-dd', rozsah od '1000-01-01' do '9999-12-31' |
TIME | čas jako textový řetězec ve tvaru 'hh:mm:ss' |
DATETIME | prakticky je to zřetězení data a času: 'rrrr-mm-dd hh:mm:ss' |
TIMESTAMP | Navenek se chová stejně jako Datetime, ale interně je to dword s počtem sekund uplynulých od 1.1.1970. Rozsah mu končí v lednu 2038, takže tenhle typ moc nedoporučuji a uvádím ho jenom pro úplnost. |
BLOB a spol. | Obecná data v binárním tvaru, použití analogické k typům TEXT. Nebudeme je potřebovat. |
Upřesňující informace k datovým typům: | |
---|---|
UNIQUE | Říká, že nesmí existovat víc řádků, které mají v této položce stejnou hodnotu (s výjimkou hodnoty NULL). Smysl to má pouze u klíčů. |
NOT NULL | Tahle hodnota nesmí být prázdná - nepůjde do ní vložit hodnota NULL. |
PRIMARY KEY | Tím se určí, že se tenhle sloupec (v každé tabulce max. jeden) bude používat jako klíč. Vhodné pro nějaké relativně krátké identifikační kódy, podle kterých budeme řádky nejčastěji hledat. Primární klíč je vždy NOT NULL a UNIQUE; i když to nenařídíme, dostane tyhle vlastnosti implicitně. |
AUTO_INCREMENT | Jen pro čísla. Při vkládání řádku dejte této položce hodnotu NULL a systém jí automaticky přidělí hodnotu o 1 větší než dal minulému řádku (přírůstek se teoreticky dá změnit, ale tím se teď nebudeme zatěžovat). Výborná věc pro pohodlnou tvorbu unikátních identifikačních klíčů. |
DEFAULT hodnota | Výchozí hodnota, kterou položka dostane, když ji při vkládání řádku neuvedeme. Nefunguje na Texty, Bloby a položky s auto_incrementem. Jen pro úplnost, prakticky to nevyužijeme. |