Začínáme s MySQL 7. - tvorba tabulek

V předchozích dílech jsem vám představoval MySQL převážně v teoretické a tudíž ne moc záživné formě. Vzhledem k tomu, že toho bylo již dost, tak je myslím na čase, podívat se trochu více na praxi - konkrétně na tvorbu tabulek.
V jednom z předchozích dílu jsem vám ukazoval, jakým způsobem se v MySQL vytvoří databáze. Databáze je základním stavebním prvkem v MySQL a je vždy reprezentována příslušným podadresářem v adresáři Data (pod Windows). Seznam těchto databází získáte pomocí již dříve zmíněného příkazu show databases, který zadáte v MySQL Monitoru. Každá jednotlivé databáze se skládá z tabulek a o těch je celý dnešní díl.

Tvorba tabulky

Tabulka se v MySQL vytváří pomocí SQL příkazu create. Jeho syntaxe je dána standardem ANSI SQL92, což je standard pro jazyk SQL a MySQL se jim řídí. Základní syntaxe příkazu create vypadá následovně:

create [temporary] table [if not exists] název_tabulky [(definice poli,...)] [možnosti tabulky] [výběrový příkaz]

Tak takhle vypadá syntaxe příkazu create v SQL. Pokud se vám toto zdá dosti nepřehledná, tak nezoufejte, hned to vysvětlím do trochu srozumitelnější formy. Daný příkaz se skládá z tzv.. povinných častí tj. takových, které musíte uvést vždy a takových, které jsou nepovinné a jsou uvedeny v hranatých závorkách. Nejprimitivněji zadaný příkaz create vypadá například následovně:

create table cisla (id int); 

Většina tabulek začíná syntaxí create table, která je povinná, následována názvem tabulky (v tomto případě „cisla“) a na závěr v závorkách naleznete seznam nadefinovaných polí (s přiděleným datovým typem), které jsou od sebe odděleny čárkami. Celý příkaz se, podobně jaké jiné příkazy v MySQL monitoru, ukončuje středníkem. Po následném odeslání příkazu SQL serveru se, pokud jste neudělali žádnou chybu v syntaxi, vypíše něco jako „Query OK, 0 rows affected (0.12 sec)“. V opačném případě se vypíše chybová hláška.

(Poznámka: Definice polí sice není povinná, ale to jen v tom případě, že při tvorbě tabulky využijeme nepovinnou část [výběrový příkaz] - viz. dále. V jiných případech je nutné ji použít, protože tabulka bez polí (tudíž i bez možnosti uložit data) je nesmysl.)

Nepovinná část příkazu [temporary] umožňuje vytvářet dočasnou tabulku, která se automaticky smaže po odpojení uživatele od databázového serveru. Tuto část využijete velmi zřídka. Většinou se totiž využívá jen u náročných operací, kde se pracuje s velkým množstvím dat. Daleko častěji však využijete část [if not exists], která je jakousi podmínkou existence tabulky. Pokud si tedy nejste třeba jisti, zda-li tabulka již existuje, pak použijte tuto nepovinnou pasáž a máte vyhráno. Toto zejména využijete u koncových aplikacích, která využívající MySQL a kde je snaha možnost chyby minimalizovat. Syntaxe může vypadat následovně:

create table if not exists cisla (id int); 

Pokud tabulka neexistuje, pak bude vytvořena. V opačném případě se ovšem nic nestane a žádnou chybu to nezpůsobí.

Další užitečnou částí jsou [možnosti tabulky], kde můžeme nadefinovat zbývající možnosti tabulky jako je například volba typu tabulky, přidání komentáře, nastavení hesla... apod. První zmíněná možnost tj. změna typu tabulky se může stát někdy užitečná. Pro úplnost zmíním jednotlivé typy:

Typ Popis
BDB či Berkeley_db tento typ je vhodné využít v případě, že potřebujete využít transakční zpracování. Můžete jej využít od verze 3.23.34.
HEAP tento typ je dostupný pouze pro dočasné tabulky vytvářené v paměti.
ISAM původní typ tabulky, který se již moc nevyužívá, protože typ MyISAM je vhodnější.
InnoDB pomocí tohoto typu můžete taktéž využít transakční zpracování. Je dostupný od verze 3.23.34a.
MERGE pomocí tohoto typu můžete ukládat MyISAM tabulky do jednoho souboru
MyISAM implicitní typ tabulky, který nastoupil od verze 3.23.xx.

Výše vypsaný seznam typů tabulek je pouze orientační. Pokud se rozhodnete využít jiný typ než implicitní MyISAM (většinou není důvod měnit), pak podrobnější informace o daném typu naleznete v manuálu. Změnu typu provedete takto:

create table nova_tabulka (id int, popis text) type=BDB;

Předcházející příkaz vytvoří tabulku u které je její implicitní typ MyISAM změněn na BDB. V případě, že BDB či jiný typ není v distribuci MySQL k dispozici, tak se namísto toto dosadí implicitně MyISAM. Jak jsem již zmínil dříve, tak MySQL disponuje ještě dalšími možnostmi, kterými umožníte určitou změnu chování tabulky. Kompletní výčet jsem sepsal v následující tabulce:

Možnost Popis
AUTO_INCREMENT = X možnost nadefinování automatického čísla. Toto číslo bude přibližně o 10% rychlejší než to samé, které je uvedeno přímo v tabulce. Nutno uvést počáteční hodnotu. (MyISAM)
AVG_ROWS_LENGTH = X pomocí tohoto nastavíte délku řádky v tabulce. Tato tabulka však musí obsahovat pole proměnné délky. Tuto možnost využijete zejména u rozsáhlých tabulek.
CHECKSUM = 1 či 0 v případě, že nastavíte tuto možnost na 1, pak získáte lepší možnost opravy v případě poškození tabulky. Nevýhodou však je trochu nižší rychlost takto vytvořené tabulky. (MyISAM)
COMMENT=`komentář` umožňuje k tabulce přiložit komentář.
MAX_ROWS = X definuje maximální počet řádků, které lze v tabulce uložit. Nastavením této možnosti může zvýšit rychlost.
MIN_ROWS = X pravý opak předchozí možnosti. Taktéž může zvýšit rychlost.
PACK_KEYS = 1 či 0 pokud tuto možnost nastavíte na 1, pak docílíte zmenšení a zrychlení indexů - ovšem za cenu pomalejších aktualizačních dotazů (MyISAM, ISAM).
PASSWORD = `heslo` zaheslování tabulky (konkrétně souboru *.frm)
DELAY_KEY_WRITE = 1 či 0 celkem zajímavá možnost, jak zajistit to, aby se aktualizovala tabulka jen v tu dobu, kdy s ní nebude nikdo pracovat (MyISAM).
ROW_FORMAT = default, dynamic, static či compressed určuje způsob uložení polí v tabulce. Běžně využijete dynamic či static (MyISAM). Tuto možnost využijete zřídka.

Jak vidíte, tak dostupných možností je vcelku dost. Je tedy na vás, zda-li se pro některou rozhodnete či nikoliv. Pro snazší pochopení použiji následující příklady:

create table dalsi_tabulka (id int, popis text) comment=`toto je komentář k tabulce`;
create table posledni_tabulka (id int, popis text) comment=`a další komentář`  max_rows=30;

Poslední nepovinnou částí příkazu create je tzv. [výběrový příkaz]. Touto možností můžete vytvořit novou tabulku, která bude obsahovat data z jiné, již dříve definované, tabulky. Příklady:

create table uzivatele select * from mysql.user;
create table uzivatele1 select * from user;

První zmíněný příkaz vytvoří tabulku uzivatele, která bude totožná s tabulkou user a která se navíc nachází v jiné databázi. Druhý příklad ukazuje, jak se to samé děje v případě, že pracujete pouze uvnitř jedné databáze. Pokud teď nerozumíte výběrovému dotazu select * from user, pak nezoufejte! Tomuto SQL příkazu bude věnována jedna z následujících kapitol. Prozatím jen to, že tento dotaz vybere všechna data z tabulky (včetně nadefinovaných polí) a zkopíruje je do tabulky nové, v tomto případě uzivatele resp. uzivatele1. Tento příkaz lze samozřejmě zadat daleko složitější a vybrat jím jen některá data či pole, ale o tom bude řeč až v samostatné kapitole.

Aby jsem toto vše alespoň trochu shrnul, tak na závěr vytvořím trošku složitější tabulku:

create table if not exists seznam_uzivatelu
(id int primary key not null auto_increment,
jmeno char (20),
prijmeni char (20),
adresa char (50),
vek tinyint)
comment=`seznam uzivatelu`;

Tato tabulka se vytvoří v případě, pokud neexistuje (if not exists). Tabulka bude mít pole ID, které bude sloužit k jednoznačné identifikaci jednotlivých záznamu a které bude primárním klíčem, bude muset být zaplněné a při každém novém záznamu se do tohoto pole vloží vždy číslo o jedno vyšší, než bylo kdy použito v této tabulce. Zbytek nadefinovaných polí je myslím jasný a na závěr byl k tabulce připojen komentář.

Závěrem

Ohledně tvorby tabulek by to bylo pro dnešek vše. Příště vám povím něco o úpravě a rušení tabulek při použití příkazu alter table respektive drop table.
Diskuze (2) Další článek: Microsoft uvedl Pocket PC 2002

Témata článku: Software, Programování, Toto, Tvor, MySQL, Tvorba, Tito, Častá operace, Předchozí možnost, Následující řádek, Alter, Nota, TV +, Pole, Jednotlivý díl, Opačný případ, Syntax, Tab, Mys, Přidělený id, Základní identifikace


Určitě si přečtěte

Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

** Kde jsou ty doby, kdy měl skoro každý doma Photoshop ** Photoshop a Premiere Pro od kamaráda nebo z warezu ** Dnes už to nemá smysl, existuje totiž hromada laciných alternativ

Jakub Čížek | 90

Jakub Čížek
Grafický editorStřih videa
Teď už Chromium ovládne Windows 10 úplně. Microsoft dokončil WebView2

Teď už Chromium ovládne Windows 10 úplně. Microsoft dokončil WebView2

** Před dvěma lety se Microsoft zasnoubil s Chromem ** Nový Edge není zdaleka jejich jediné dítě ** Ještě důležitější je komponenta WebView2

Jakub Čížek | 53

Jakub Čížek
Windows 10ChromeSoftware
Zapomeňte na destičky. Raspberry Pi 400 je nový počítač zabudovaný do klávesnice
Lukáš Václavík
Raspberry PiPočítače
Air Bank, Fio banka a MONETA zakládají alianci pro bankovní identitu
Jakub Čížek
BankaČeskoeGovernment
Lidl buduje chytrou domácnost, propojí všechno se vším
Lukáš Václavík
LidlChytrá domácnostIoT
Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

** Obtěžují vás neustálé dotazy webů, zda chcete zobrazovat oznámení? ** Můžete je zakázat, a to jak kompletně, tak i pro jednotlivé stránky ** Připravili jsme návody pro Chrome, Firefox, Edge a Operu

Karel Kilián | 11

Karel Kilián
Jak na InternetTipyProhlížeče
Vyšel Windows 10 October 2020 Update. Poradíme, jak je stáhnout a co je nového
Vladislav Kluska
October 2020 UpdateWindows 10

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5