LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> MySQL (12) - tipy k tvorbě tabulek

MySQL, tabulky a speciality - automaticky číslovaná pole, dočasné tabulky a tak dále.

12.4.2005 12:00 | Petr Zajíc | Články autora | přečteno 49688×

Stejně, jako je tomu v kterémkoli zákoutí práce s počítačem, má i tvorba tabulek v databázích svoji "třináctou komnatu". Proto se dnes podíváme na některé podrobnosti práce s tabulkami, které se vám v praxi mohou velmi hodit.

Seznam tabulek

MySQL, stejně jako prakticky každá jiná databáze, má příkaz, kterým zobrazíte seznam existujících tabulek v databázi. Provedete to pomocí tohoto kódu:

SHOW TABLES;

Aby to fungovalo, musíte mít zvolenu nějakou databázi. Jinými slovy, bezprostředně po přihlášení k serveru, pokud nepoužijete příkaz USE [název databáze], tak to selže. Příkaz SHOW TABLES má ovšem určité rozšíření, které trochu popírá předchozí větu - ono to totiž jde napsat takto:

SHOW TABLES FROM SHOP;

A pak je samozřejmě úplně jedno, v jaké databázi jsme, protože budou vypsány tabulky ze zvolené databáze.

Pozn.: Seznam tabulek v nějaké databázi je typickým příkladem toho, čemu se říká metadata, neboli "data o datech". Pokud se budete věnovat databázím hlouběji, zjistíte, že porozumět metadatům a umět s nimi pracovat je docela důležité. Například v úlohách typu import - export dat a podobně.

Dočasné tabulky

Dočasné tabulky se od "trvalých" tabulek liší především tím, že existují pouze od jejich vytvoření do ukončení spojení, které je má "na svědomí". Tedy - jakmile zanikne připojení, zaniknou i všechny dočasné tabulky, které během tohoto spojení vznikly. Vytvořit dočasnou tabulku přitom není nikterak složité. Stačí zavzpomínat na minulý díl a doplnit, že při manipulaci s dočasnými tabulky se mezi CREATE a TABLE vloží klíčové slovo TEMPORARY:

CREATE TEMPORARY TABLE PENIZE (MNOZSTVI int);

Většina z toho, co platí o normálních tabulkách, platí i o tabulkách dočasných. To například znamená, že můžete použít rozšíření IF NOT EXISTS, jak o něm byla řeč v minulém díle. Stejně tak lze vytvořit dočasnou tabulku kopírováním existující (a to jak dočasné, tak trvalé) tabulky nějak takto:

CREATE TEMPORARY TABLE PENIZE2 LIKE PENIZE;

Ovšem, používání dočasných tabulek má rovněž svoje záludnosti. O nich byste měli něco vědět, pokud je chcete používat. Tak především, narozdíl od trvalých tabulek mohou dvě různá připojení vytvořit dvě dočasné tabulky se stejným názvem (aniž by to kolidovalo). To je celkem příjemné. Vyplývá z toho, že pokud víte, že jste určitě nevytvářeli dočasnou tabulku nějakého jména, prakticky nikdy nemusíte používat klauzuli IF NOT EXISTS. Další věc - dočasné tabulky se neobjevují ve výpise tabulek pořízeného pomocí příkazu SHOW TABLES. A nakonec, manuál tvrdí, že mohou existovat další omezení.

Proč by mohl někdo chtít používat dočasné tabulky? V praxi je používám ve třech případech:

  1. Někdy existuje výpočet, který je tak složitý nebo natolik náročný na zdroje, že je rozumné nějak ukládat mezivýsledky. V takovém případě může být použití dočasné tabulky docela na místě.
  2. Někdy bývá třeba pracovat s určitou podmnožinou dat z rozsáhlé tabulky, nebo dokonce s podmnožinou dat z více velkých tabulek (mám na mysli tabulky s desetitisíci nebo statisíci záznamy). V takovém případě může být praktické vykopírovat si onu podmnožinu dat do dočasné tabulky a pak tuto tabulku použít.
  3. Někdy je potřeba opakovaně použít data vzniklá nějakým výpočtem. Dočasná tabulka může v takovém případě být to "pravé ořechové".

Pozn.: Uvedené zásady byste něměli chápat jako definitivní. Existuje totiž celá řada dalších mechanizmů, které řeší některé z problémů popsaných výše (indexy, pohledy atd.). Chtěl jsem jen, abyste měli představu, k čemu se dočasné tabulky dají použít.

Automaticky číslovaná pole

V tabulkách bývá, a to velmi často, pole jednoznačně identifikující daný řádek. V různých DBMS se vytvářejí různě, většinou jako náhodná čísla nebo sekvence. Typické je, že existuje pole, které automaticky s každým přidaným řádkem zvýší čítač o jedničku. MySQL má podporu pro tuto funkci. Ačkoli to souvisí s indexy, o nichž teprve v seriálu bude řeč, již teď vám ukážu, jak se automaticky číslované pole vytvoří:

CREATE TABLE cislovani (id INT AUTO_INCREMENT, PRIMARY KEY (id));

K tomu si dovolím několik postřehů:

  • Automaticky číslované pole se většinou označuje tak, aby z názvu bylo poznat, že se jedná o takové pole. Typicky ID (identity), nebo [název tabulky]ID a podobně.
  • Jak později v seriálu uvidíme, automaticky číslovaná pole musejí být součástí indexu. Uvidíme také, že toto omezení má logický důvod.
  • Třebaže většinou necháme číslování řádků na aplikaci, principelně nic nebrání vložení hodnoty do tohoto pole přímo (tzn. vložení například čísla 15 projde, přestože nejvyšší dosud vložené číslo nebyla 14. Vložení pochopitelně selže, pokud by tam patnáctka již byla).
  • MySQL nevyplňuje "díry" vzniklé odstraněním řádků (nebo vložením jiné než následující hodnoty v řadě). Je-li záznam smazán, jeho automatické číslo již nikdy nebude přiděleno.
  • V jedné tabulce smí být nejvýše jedno automatické číslování.
  • Pokud by při číslování měl být překročen maximální rozsah hodnot, které lze do číslovacího sloupce vložit, dojde k chybě, a řádek nebude vložen.
  • Automaticky číslované pole lze přidat k již existující tabulce. MySQL pochopitelně doplní čísla, pokud by snad tabulka již obsahovala nějaká data.

Automatická čísla se v tabulkách MySQL používají velmi často. Je to jednoduše řečeno proto, že prakticky v každé tabulce existuje důvod mít jednoznačně identifikované řádky.

Přejmenování tabulky

V MySQL existuje možnost přejmenovat existující tabulku, a to beze ztráty dat. Slouží k tomu příkaz rename table:

RENAME TABLE cislovani TO cislovani2;

Ačkoli je to jednoduché, existuje dost dobrých důvodů, proč to NEDĚLAT. Níže uvádím ty nejpodstatnější:

  • Nutnost přejmenovat tabulku obvykle poukazuje na to, že programátor nemá propracovanou metodiku názvu objektů, nebo že ji má "děravou".
  • Přejmenováním tabulky se automaticky NEUPRAVÍ všechny příkazy, v nichž tabulka byla použita. Znamená to, že může přestat bez varování fungovat nějaký kód. Zejména to platí o MySQL 5.x, kde je možno používat uložené procedury.
  • Je třeba si uvědomit, že jedna nebo i více klientských aplikací může mít starý název tabulky někde ve zdrojovém kódu. Je třeba to zkontrolovat a opravit i tam.

Tip: V naprosté většině editorů zdrojového kódu lze použít příkazy pro vyhledání a nahrazení, takže to nemusí být až takový problém. Pokud jde o příkazy uložené v databázi, existuje postup, při němž se 1) databáze oskriptuje, 2) ve vzniklém scriptu se vyhledají všechny zmínky o původním názvu tabulky a 3) ty se opraví. Nicméně, přejmenování tabulky dost často vede ke komplikacím, zejména pokud je projekt již v pokročilém stádiu vývoje.

V dalším díle seriálu se podíváme na to, jak do tabulek v MySQL vkládat data.

Verze pro tisk

pridej.cz

 

DISKUZE

automaticke cislovani 27.4.2005 09:49 Karel Honzl
  L Re: automaticke cislovani 28.4.2005 17:30 Petr Zajíc




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

16.7.2018 1:05 /František Kučera

Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.


Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze