|
|||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
bootable [55]
commercial [7] no-commercial [42] unclassified [20] [7]
Software (10844)
|
MySQL (15) - Odstraňujeme dataMySQL a odstraňování záznamů. Ale - je vůbec dobrý nápad něco v databázi mazat? Nedalo by se to obejít? Přečtěte si!
Protože jsme se v předchozích dvou dílech věnovali příkazům, pomocí nichž lze data do MySQL vkládat a upravovat, asi nikoho nepřekvapí, že dnes se budeme věnovat mazání záznamů.
Příkaz DELETEMySQL má pro odstranění záznamů z tabulky příkaz DELETE. Ten odstraní nula nebo více řádků. Jeho nejjednodušší forma je: delete from [názav
tabulky];
Příkaz uvedený výše odstraní z tabulky všechny záznamy. Pozor, v některých DBMS je přípustná i forma příkazu s hvězdičkou: delete * from [názav
tabulky];
kterou však MySQL nevezme, a příkaz takto napsaný by skončil chybou. Samozřejmě, málokdy budete chtít odstranit z tabulky všechny záznamy. Mnohem častější bude situace, kdy chcete vybrat jen nějaké řádky a ty odstranit. O takové situaci platí to, co bylo řečeno v minulém díle. Lehce to shrňme. Příkaz DELETE může obsahovat klauzuli WHERE, která omezí mazané řádky na nějakou podmnožinu z celkového počtu pomocí podmínek. Lze tedy například napsat: delete * from faktury
where cena = 500;
Rovněž lze omezit maximální počet řádků, které bude třeba smazat, pomocí klauzule LIMIT. Má-li být smazán nejvýše jeden řádek, lze tedy přepsat příkazy výše ve smyslu: delete * from faktury
where cena = 500 limit 1;
Moc doplňujících informací se k příkazu DELETE napsat nedá. Má
pochopitelně nějaké ty přepínače, o nichž je zmínka v manuálu.
DELETE však není jediný způsob, jak v MySQL odstraňovat záznamy. Příkaz TRUNCATE TABLETRUNCATE TABLE je příkaz, který odstraňuje všechny záznamy v tabulce, přičemž definici tabulky samotné ponechává. Následující dva příkazy budou tedy totožné: delete from faktury;
Proč tedy existují na jednu akci dva různé příkazy? Především proto,
že příkaz TRUNCATE je mnohem rychlejší. Jelikož ví, že bude muset
smazat celou tabulku, nemusí tento příkaz procházet a mazat řádky po
jednom. U extrémně velkých tabulek je toto zrychlení markantní. Tento
příkaz však nevrací počet odstraněných řádků. Problémy a jak je řešitSe samotným mazáním řádků v tabulkách obyčejně problémy nebývají.
Otázka však je, jak smazání ovlivní data nebo aplikace, které s daty
pracují. Potíž je v tom, že jednou smazaný řádek již nelze nijak
obnovit. Další pozoruhodná potíž spočívá v tom, že data v jedné
tabulce mohou souviset s daty v tabulce jiné (o tom ještě v seriálu
uslyšíme). Ukažme si tedy, jak se to dá v praxi obejít. Pozn.: Vnímavý čtenář namítne, že i
smazaný záznam lze obnovit, pokud je operace součástí transakce. To je
pravda. Zmíníme se o tom jindy. Rovněž je pravda, že data v
souvisejících tabulkách lze
efektivně spravovat pomocí referenční integrity. Nicméně, obecný
problém s mazáním nic z toho úplně neřeší. Stornovací záznamy insert into
pohyby_na_uctu (ucet, datum, castka) values ('123456', '2005-04-25
12:00:00', -50000);
Právě byste zchudli o 50 000,- Kč. Jenomže na chybu by se přišlo. Běžně v takových situacích nedochází k tomu, že by se záznam o odečtení prostředků prostě vymazal - to by totiž vedlo k tomu, že už se nikdo nedozví, co se vlastně stalo. Namísto příkazu: delete from
pohyby_na_uctu where ucet='123456' and datum = '2005-04-25 12:00:00'
and castka = -50000 limit 1;
tedy dojde nejspíš ke vložení dalšího záznamu s opačnou hodnotou částky: insert into
pohyby_na_uctu (ucet, datum, castka) values ('123456', '2005-04-25
12:10:00', 50000);
Příznaky delete from knihy where
rok_zakoupeni = 1999;
by se v aplikaci používající tuto techniku zapsalo něco ve smyslu: update knihy set deleted
= 1 where rok_zakoupeni = 1999;
Pokud byste si to chtěli do budoucna rozmyslet, můžete provést další
příkaz UPDATE. Aplikace by pochopitelně musela počítat s tím, že nesmí
vracet všechny knihy, ale jen ty, které NEMAJÍ nastavenou jedničku ve
sloupci DELETE. Přesun jinam create table if not
exists archiv_knih like knihy;
Výhody a nevýhody? V databázi se bude skladovat mnohem více
tabulkek, což je nevýhodné. Ale každý smazaný záznam bude v archivu,
což je zase velmi výhodné. Tabulka, do níž se v takovém případě
přesouvá, by měla mít stejnou strukturu jako tabulka, z níž se bude
mazat. Pomocí CREATE TABLE ... LIKE je velmi jednoduché toho dosáhnout. Logování V příštím díle našeho seriálu se podíváme na některé speciality,
které provázejí příkazy pro manipulaci s daty.
Related article
MySQL (1) - pestrý svět databází MySQL (2) - Instalujeme databázi MySQL MYSQL (3) Instalujeme MySQL podruhé MySQL (4) - něco terminologie MySQL (5) - tajuplné SQL MySQL (6) - Ukládáme řetězce MySQL (7) - hrátky s čísly MySQL (8) - Ukládání datumů MySQL (9) - Další datové typy MySQL (10) - tvorba databáze. Základy DDL MySQL (11) - vytváříme tabulky MySQL (12) - tipy k tvorbě tabulek MySQL (13) - Vkládáme data MySQL (14) - Upravujeme data MySQL (16) - Tipy a triky k manipulaci s daty MySQL (17) - vybíráme data MySQL (18) - Filtrujeme data MySQL (19) - Řadíme data MySQL (20) - spojení více tabulek MySQL (21) - klauzule JOIN MySQL (22) - tipy a triky ke spojování tabulek MySQL (23) - relace 1:N a N:N MySQL (24) - Seskupujeme záznamy MySQL (25) - hrátky se seskupenými záznamy MySQL (26) - Poddotazy MySQL (27) - Složitější dotazy MySQL (28) - Dotazy pro pokročilé MySQL (29) - Vracení nejvyšších záznamů MySQL (30) - průběžné součty MySQL (31) - Indexy MySQL (32) - ještě k indexům MySQL (33) - Příkaz UNION MySQL (34) - větvení kódu a pivotní tabulky MySQL (35) - vestavěné funkce MySQL (36) - Regulární výrazy MySQL (37) - použití fulltextového vyhledávání MySQL (38) - Fulltext a praxe MySQL (39) - typy tabulek v MySQL MySQL (40) - další typy tabulek MySQL (41) - Transakce MySQL (42) - ještě k transakcím MySQL (43) - Uložené procedury MySQL (44) - parametry uložených procedur MySQL (45) - větvení kódu uložených procedur MySQL (46) - Triggery MySQL (47) - Triggery a praxe MySQL (48) - UDF MySQL (49) - pohledy MySQL (50) - Pohledy podruhé MySQL (51) - Metadata MySQL (52) - A co zálohování? MySQL (53) - SELECT INTO OUTFILE MySQL (54) - zálohování MySQL z webu MySQL (55) - zálohování MySQL z pohledu správce MySQL (56) - Obnova zálohovaných dat MySQL (57) - Ach, ta čeština MySQL (58) - čeština v praxi MySQL (59) - české řazení MySQL (60) - řádkový klient MySQL (61) - Oprávnění MySQL (62) - Oprávnění podruhé MySQL (63) - jemné nastavení práv MySQL (64) - nad dotazy čtenářů MySQL (65) - Ladíme server MySQL (66) - Ještě k ladění serveru MySQL - (67) MySQL (68) - Závěr MySQL (69) - Prepared Statements Previous Show category (serial) Next
|
Szukanie oprogramowania
|
|||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |