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 53169×
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:
- 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ě.
- 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.
- 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
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
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ář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|