MySQL aneb u?íme se SQL jazyk (XII.)

Autor: Ji?í Luká? <jirilukas(at)supersvet.cz>, Téma: MySQL, Vydáno dne: 25. 09. 2001

Vítám v?echny databázové nad?ence u dne?ního dvanáctého dílu na?eho seriálu "MySQL aneb u?íme se SQL jazyk", ve kterém vám uká?i, jak jednodu?e lze zajistit automatické ?íslování nov? p?idaných ?ádk? do tabulky, jak zalo?it a zru?it novou respektive ji? existující databázi a mo?ná vám také povím n?co málo o ... (- no, nechte se p?ekvapit!)

Automatické ?íslování nov? p?idaných ?ádk? do tabulky

P?edstavte si, ?e jste dostali za úkol navrhnout databázovou strukturu "softwarové poklady" a stojíte p?ed problémem, jak jednozna?n? identifikovat ka?dý záznam (= ?ádek v databázové tabulce) vlo?ený do této "pokladny", p?i?em? máte jasn? definovány následující podmínky: Softwarová pokladna musí být schopna uchovávat následující informace: Datum výdeje/p?íjmu pen?z z/do pokladny, adresy a iniciály zú?astn?ných osob, p?esnou finan?ní vý?i transakce vyjád?enou v K?, typ transakce (výdej, p?íjem), interní poznámku pokladníka. ...

I kdy? tento problém (- tedy jednozna?ná identifikace ?ádku v tabulce) má n?kolik r?zných ?e?ení (nap?. generování n?jakého jednozna?ného identifikátoru va?ím obslu?ným programem nebo pou?ití tzv. slo?eného primárního klí?e), tak si myslím, ?e je mnou vý?e nastín?ná situace jasným p?íkladem p?ímo volajícím po nasazení auto_increment(a?ní) funkce, která ná? problém vy?e?í jednoduchým, ale velmi ú?elných zp?sobem. - Celé kouzlo spo?ívá v tom, ?e p?i definici tabulky p?i?adíme n?jakému "celo?íselnému" sloupci vlastnost auto_increment a ten pak p?i ka?dém vlo?ení nového ?ádk? do této tabulky sám automaticky nabude jedine?nou celo?íselnou hodnotu, jen? je v?dy o jedni?ku vy??í ne?-li hodnota tohoto ?ísla na p?ede?lém ?ádku. Standardn? toto "samo zvy?ující se ?íslování" za?íná nulou, av?ak p?i definici tabulky lze jednozna?n? stanovit hodnotu, od jaké se má za?ít ?íslovat.

Celou v?c si nyní uká?eme na vý?e popsaném p?íkladu:
(Na vysv?tlenou pouze uvádím, ?e po?ítám s tím, ?e existuje je?t? druhá tabulka, která obsahuje adresy a iniciály v?ech osob, jen? se zú?astnili n?jaké transakce v pokladn? a ve své hlavní pokladní tabulce tedy ji? p?ímo neuvádím tyto informace, ale pouze se odkazuji na "id" pomyslné adresní tabulky.)

mysql> CREATE TABLE pokladna (
    -> idp int unsigned not null auto_increment primary key,
    -> datum date not null,
    -> typ char(10) not null,
    -> kc_hodnota float not null,
    -> kdo int not null,
    -> poznamka text);

Nejprve bych rád vysv?tlil n?které nové atributy, které jsem pou?il p?i ?e?ení vý?e uvedeného p?íkladu a pak se budu dále v?novat problematice "automatického ?íslování nov? p?idaných ?ádk? do tabulky".

Tak tedy p?kn? popo?ádku:

Podíváme-li se na vý?e uvedené ?e?ení z pohledu zadání "softwarové pokladny", tak si myslím, ?e m??eme být pln? spokojeni, jeliko? ?e?ení 100 % vystihuje smysl zadání! - Sloupec idp bude toti? v?dy obsahovat jedine?nou hodnotu, jejím? prost?ednictvím lze jednozna?n? identifikovat ka?dý jednotlivý ?ádek v tabulce pokladna.

Jak vlo?it do takto koncipované tabulky nový ?ádek?

Je?t? ne?-li opustíme toto velmi zajímavé téma ("Automatického ?íslování nov? p?idaných ?ádk? do tabulky"), tak bych vás rád upozornil na jednu drobnou zvlá?tnost, se kterou se nutn? setkáte p?i vkládání nového ?ádku do tabulky, která obsahuje sloupec s auto_increment(a?ní) funkcí.

V p?ípad?, ?e budete chtít pou?ít zjednodu?ený p?íkaz INSERT (viz. pátý díl) a nebude tedy blí?e specifikovat sloupce, do kterých se mají jednotlivá data ulo?it, tak je nutné na míst? ur?eném pro data sloupce, který disponuje auto_increment(a?ní) funkcí, uvést hodnotu NULL.

Ukázkový p?íklad:

insert into pokladna values(null,"2001-09-25","vydej","100,50",2,"nic");

Jak zalo?it a zru?it novou respektive ji? existující databázi

Jeliko? jsou ob? vý?e uvedené akce velmi jednoduché, tak ihned p?ejdu k ukázce a nebudu vás zbyte?n? zdr?ovat dal?ím výkladem!

Syntaxe:

Zalo?ení nové databáze: CREATE DATABASE jméno_databáze;

Zru?ené existující databáze: DROP DATABASE jméno_databáze;

Oba dva p?íkazy vám doporu?uji ihned vyzkou?et a jejich ú?innost si nap?íklad ov??it prost?ednictvím p?íkazu SHOW DATABASES (viz. minulý díl).

P?eji p?íjemný pracovní týden ...




Copyright supersvet.cz, 1998-2005