V dnešním díle si ukážeme, jak se připojit k databázovému serveru, jak vytvářet databáze, tabulky a jak data do tabulek nejen vkládát, ale také získávat.
Jak jsme si již řekli v minulém díle, využijeme k připojení k MySQL serveru mysql.exe klienta. Existují také jiné klientské programy na správu databázového serveru, mezi které patří zejména phpMyAdmin, MySQL Manager atd.
Nyní si spustíme příkazový řádek a přejdeme do bin adresáře MySQL serveru. K připojení k databázi využijeme účet root s prázdným heslem (později si ukážeme, jak vytvářet další uživatele a měnit jejich hesla). Pro připojení zadejte následující údaje:
c:\mysql\bin>mysql -u root -p <ENTER> Enter password: <ENTER>
Po úspěšném připojení by se nám měla zobrazit uvítací obrazovka podobná této:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 to server version: 3.23.56-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Ukončení naší seance provedeme jednoduchým příkazem:
mysql> quit <ENTER> Bye
Po připojení k MySQL serveru můžeme také vylistovat všechny dostupné databáze:
mysql> SHOW DATABASES; <ENTER> +----------+ | Database | +----------+ | mysql | | test | | tmp | +----------+
Poznámka: příkazy, které si budeme uvádět můžeme psát také malými písmeny.
Pro vytvoření nové databáze použijeme příkaz, který má následující strukturu:
CREATE DATABASE <název databáze>;
Za název databáze dosadíme jméno, které bude mít nově vytvořená databáze. Jednotlivé příkazy, které budeme vkládat musí být ukončeny středníkem. MySQL totiž umožňuje zadávat jednotlivé SQL příkazy pro přehlednost na více řádků.
Nyní si vytvoříme databázi "chip", se kterou budeme pracovat:
mysql> CREATE DATABASE chip; <ENTER> Query OK, 1 row affected (0.12 sec)
Výsledkem bude zpráva, kdy nám MySQL potvrdí zadaný SQL příkaz, zobrazí počet řádků ovlivněných tímto příkazem a dobu zpracování tohoto příkazu.
V případě, že s touto databází budeme chtít pracovat, musíme ji vybrat:
mysql> USE chip; <ENTER> Database changed
Pro vytváření tabulek slouží násedující SQL příkaz:
CREATE TABLE <název tabulky>(
<1. položka> <typ>,
<2. položka> <typ>,
......
<n. položka> <typ>,
)
Jednotlivé položky musí mít určeny svůj datový typ (jako v ostatních programovacích jazycích). Mezi hlavní datové typy patří:
Typ | Popis |
TINYINT | Číslo v rozmezí -128 až 128. |
SMALLINT | Číslo v rozmezí -32768 až 32767. |
MEDIUMINT | Číslo v rozmezí -8388608 až 8388607. |
INT | Číslo v rozmezí -2147483648 až 2147483647. |
INT | Číslo v rozmezí -2147483648 až 2147483647. |
BIGINT | Číslo v rozmezí -9223372036854775808 až 9223372036854775807. |
FLOAT | Číslo v plovoucí řádové čárce. |
NUMBER(a,b) | Desetinné číslo s a číslicemi před desetinnou čárkou a b desetinnými místy. |
DATE | Datum ve formátu 'YYYY-MM-DD' (rok, měsíc,den). |
DATETIME | Datum a čas ve formátu 'YYYY-MM-DD HH:MM:SS'. |
TIME | Čas ve formátu 'HH:MM:SS'. |
CHAR(n) | Textový řetězec o velikosti n (maximální počet znaků může být 255). |
VARCHAR(n) | Textový řetězec o velikosti n (maximální počet znaků může být 255). |
TINYTEXT | Textový řetězec o maximálním počtu znaků 255. |
TEXT, BLOB | Textový řetězec o maximálním počtu znaků 65535. |
MEDIUMTEXT, MEDIUMBLOB | Textový řetězec o maximálním počtu znaků 16777215. |
LONGTEXT, LONGBLOB | Textový řetězec o maximálním počtu znaků 4294967295. |
ENUM | Výčtový typ - hodnoty, ze kterých si vybíráme. Maximálně můžeme dosadit 65535 různých hodnot. |
SET | Textové hodnoty o velikosti 0 nebo více. Maximálně můžeme dosadit 64 různých hodnot. |
Když jsme si nyní ukázali datové typy, tak se můžeme pustit do tvorby ukázkové tabulky. Tabulka se bude jmenovat "autori" a bude obsahovat jména autorů knih. Jednotlivé položky budou:
Jak jsme si již v minulém díle řekli o primárních klíčích, můžeme jako primární klíč zvolit id autora. Položka, která je nastavena jako primární klíč nesmí mít prázdnou hodnotu - přiřadíme jí tedy vlastnost "NOT NULL". Vlastnost "AUTO_INCREMENT" zajistí to, že u každého nového vloženého záznamu se id zvětší o jedničku. Nyní již struktura tabulky (<ENTER> označuje stisknutí klávesy Enter :-):
mysql> CREATE TABLE autori ( <ENTER> -> id INT NOT NULL AUTO_INCREMENT, <ENTER> -> jmeno VARCHAR(30), <ENTER> -> prijmeni VARCHAR(30), <ENTER> -> PRIMARY KEY (id) <ENTER> -> ); <ENTER> Query OK, 0 rows affected (0.14 sec)
Seznam tabulek v databázi můžeme zobrazit zadáním:
mysql> show tables; <ENTER> +----------------+ | Tables_in_chip | +----------------+ | autori | +----------------+ 1 row in set (0.02 sec)
Nyní když máme vytvořenu tabulku "autori", můžeme do ní vkládat data. SQL příkaz, který zajišťuje vložení dat do tabulky má následující syntaxy:
INSERT INTO <název tabulky> VALUES ('<1. položka>', '<2. položka>', .., '<n. položka>')
Náš SQL příkaz bude vypadat například takto (prázdná hodnota id nám zajistí vložení automatického čísla - +1):
mysql> INSERT INTO autori VALUES ('', 'Petr', 'Doležal'); <ENTER> Query OK, 1 row affected (0.17 sec)
K čemu by nám bylo vkládání dat do databáze, když bychom je zpětně neuměli zase získat. K výběru dat z tabulek slouží následující SQL příkaz (uvedený příklad patří mezi základní, SQL příkaz podporuje mnohem více voleb):
SELECT <1. položka>, .., <n. položka> FROM <název tabulky> WHERE <podmínka>
Pro vybrání všech sloupců (položek) můžeme také dosadit zástupný znak '*'. Pokud bychom chtěli vybrat všechny záznamy v tabulce, můžeme využít následující SQL příkaz:
mysql> SELECT * FROM autori; <ENTER> +----+-------+----------+ | id | jmeno | prijmeni | +----+-------+----------+ | 1 | Petr | Doležal | +----+-------+----------+ 1 row in set (0.02 sec)
Pro vypsání pouze sloupce id a prijmeni použijeme SQL dotaz:
mysql> SELECT id, prijmeni FROM autori; <ENTER> +----+----------+ | id | prijmeni | +----+----------+ | 1 | Doležal | +----+----------+ 1 row in set (0.00 sec)
Pro praktické vysvětlení podmínek SQL dotazu SELECT si vložíme do tabulky další záznamy:
mysql> INSERT INTO autori VALUES ('', 'Josef', 'Beneš'); Query OK, 1 row affected (0.03 sec) mysql> INSERT INTO autori VALUES ('', 'Zdeněk', 'Berger'); Query OK, 1 row affected (0.01 sec)
Pro podmíněný výběr záznamů z tabulky můžeme využít klauzuli WHERE a běžné porovnávací operátory. Následující SQL dotaz vybere z tabulky "autori" autora, jenž má id = 1.
mysql> SELECT * FROM autori WHERE id = 1; <ENTER> +----+-------+----------+ | id | jmeno | prijmeni | +----+-------+----------+ | 1 | Petr | Doležal | +----+-------+----------+ 1 row in set (0.02 sec)
Nebo také SQL dotaz, jenž vybere všechny záznamy s identifikačním číslem větším než 1.
mysql> SELECT * FROM autori WHERE id > 1; <ENTER> +----+--------+----------+ | id | jmeno | prijmeni | +----+--------+----------+ | 2 | Josef | Beneš | | 3 | Zdeněk | Berger | +----+--------+----------+ 2 rows in set (0.04 sec)
V případě, že budeme chtít vyhledat všechny záznamy, které obsahují určitý text, můžeme využít operátor LIKE. Operátor LIKE může být také doplněn znakem "%", který umožňuje nahradit určitou část hledaného textu. Operátor LIKE se nehodí na porovnávání hesel! Na příkladě si ukážeme SQL dotaz, který vybere všechny záznamy, jež příjmení začínají na "Be":
mysql> SELECT * FROM autori WHERE prijmeni LIKE 'Be%'; <ENTER> +----+--------+----------+ | id | jmeno | prijmeni | +----+--------+----------+ | 2 | Josef | Beneš | | 3 | Zdeněk | Berger | +----+--------+----------+ 2 rows in set (0.02 sec)
Na dalším příkladě si ukážeme SQL dotaz, jenž bude obsahovat několik podmínek. Tyto podmínky uzavíráme do závorek a spojujeme slovem AND:
mysql> SELECT * FROM autori WHERE (prijmeni LIKE 'BE%') AND (id < 3); <ENTER> +----+-------+----------+ | id | jmeno | prijmeni | +----+-------+----------+ | 2 | Josef | Beneš | +----+-------+----------+ 1 row in set (0.01 sec)
Získané záznamy můžeme také seřadit pomocí klauzule ORDER BY. V případě, že chceme seřadit data v opačném pořadí, tak dosadíme ještě modifikátor DESC.
mysql> SELECT * FROM autori ORDER BY id; <ENTER> +----+--------+----------+ | id | jmeno | prijmeni | +----+--------+----------+ | 1 | Petr | Doležal | | 2 | Josef | Beneš | | 3 | Zdeněk | Berger | +----+--------+----------+ 3 rows in set (0.00 sec)
mysql> SELECT * FROM autori ORDER BY id DESC; <ENTER> +----+--------+----------+ | id | jmeno | prijmeni | +----+--------+----------+ | 3 | Zdeněk | Berger | | 2 | Josef | Beneš | | 1 | Petr | Doležal | +----+--------+----------+ 3 rows in set (0.00 sec)
Záznamy také můžeme upravovat pomocí SQL příkazu UPDATE, který má následující syntaxy:
UPDATE <název tabulky> SET <1. položka> = <hodnota>, <n. položka> = <hodnota> WHERE <podmínka>
Na příkladě si ukážeme SQL příkaz, který provede úpravu jména osoby s id = 3:
mysql> UPDATE autori SET jmeno = 'Josef' WHERE id = 3; <ENTER> Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE autori SET jmeno = 'Zdeněk' WHERE id > 2; <ENTER> Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Pro mazání záznamů slouží SQL příkaz DELETE:
DELETE FROM <název tabulky> WHERE <podmínka>
SQL příkaz, který smaže záznam s id = 3.
mysql> DELETE FROM autori WHERE id = 3; <ENTER> Query OK, 1 row affected (0.00 sec)
Stejně jako v PHP, tak také v MySQL nalezneme integrované funkce. Mezi ty nejznámější patří:
Funkce | Popis |
AVG(sloupec) | Vrátí průměr čísel ze zvoleného sloupce. |
Count(sloupec) | Vrátí počet nenulových řádků. |
Sum(sloupec) | Vrátí součet hodnot sloupce. |
Min(sloupec) | Vrátí nejmenší hodnotu sloupce. |
Max(sloupec) | Vrátí největší hodnotu sloupce. |
Distinct(sloupec) | Vybere ze sloupce jedinečné hodnoty. |
Pro tento díl to bude vše. V příštím díle si povíme o spoluprácí PHP a MySQL a vytvoříme si první aplikaci.