ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
PHP (41) - Měníme data v databázíchZměna je život! Platí to i pro data v databázích a my se dnes naučíme jak je měnit. Z databáze již umíme záznamy vybírat a umíme je do ní vkládat. Další
úkon, který
nás čeká je umět data upravit neboli aktualizovat. Zase trocha SQLV SQL se k aktualizaci řádku nebo řádků v databázi používá příkaz UPDATE. UPDATE narozdíl od INSERT nevkládá do databáze žádné řádky, ale upravuje existující data. To znamená, že provedete-li na tabulkce příkaz UPDATE, počet řádků v této tabulce se nezmění, ale mohou se změnit údaje v jednotlivých řádcích. V MySQL je pochopitelně i k příkazu UPDATE rozsáhlá dokumentace. Jeho nejprimitivnější forma pak je: UPDATE tabulka SET
sloupec=hodnota [,jiný sloupec=hodnota...]
Pokud použijete příkaz tak, jak je uveden výše, bude zaktualizována
celá tabulka, to znamená každý její řádek. Nic vám samozřejmě nebrání
použít klauzuli WHERE a vybrat jen některé řádky, které se budou
aktualizovat. MySQL umí dokonce použít rozšíření LIMIT pro stanovení
maximálního počtu řádků, které se mají měnit. Aby to nebyla jen suchá teorie předpokládejme na chvíli, že jste se práve prolomili do databáze obsahující podklady pro výpočet mezd ve Vaší firmě. Můžete si s ní dělat co chcete, třeba změnit políčko PLAT (to je představa...). Nejprve si tedy ukažme plošný přístup: UPDATE PLATY SET PLAT =
20000
Nebo se můžeme rozhodnout zvýšit všem plat o 20% (z čehož je vidět, že nové hodnoty v tabulce mohou záviset na hodnotách stejných sloupců před jejich aktualizací): UPDATE PLATY SET PLAT =
PLAT*1.2
Nebo se můžeme rozhodnout podle hesla "každý dobrý skutek musí být
po zásluze potrestán" a snížit platy jen těm, kdo je mají vysoké: UPDATE PLATY SET PLAT =
PLAT*0.8 WHERE PLAT > 20000
a konečně se můžeme zcela nekolegiálně obohatit sami příkazem ve smyslu: UPDATE PLATY SET PLAT =
PLAT*2 WHERE PRACOVNIK = 'Petr Zajíc'
Použití WHERE je na příkladech dobře vidět - zatímco první dva
manipulují všemi záznamy v databázi, třetí manipuluje jen omezenou
skupinou šťastlivců a poslední dokonce pouze jedním záznamem. Kromě příkazu UPDATE, který je v SQL standardně, má MySQL ještě
příkaz REPLACE. Nemám ho moc rád, ale funguje následovně: REPLACE se
chová jako INSERT s tím, že pokud je zároveň
nejsou data vložena jako nový řádek, ale existující data jsou
přepsána. Tento příkaz vám může
ušetřit nějaký čas. (Přesně řečeno místo INSERT a UPDATE použijete
REPLACE). Rád ho nemám proto, že není standardizován. Aktualizujeme pomocí PHPTady je situace veselá, protože platí většina toho, co pro INSERT.
Takže se můžete podívat do minulého dílu,
a já krátce zopakuji:
Některé věci, které jsme uvedli v souvislosti s příkazem INSERT pro
UPDATE naopak neplatí, nebo neplatí tak striktně. Například bude
možná obtížné nebo dokonce nemožné nějak předem odkontrolovat, jaký
dopad
bude mít na databázi provedení příkazu UPDATE. Řeší se to tak, že se
stav tabulky zobrazí po
provedení příkazu (třeba chcete-li změnit při nakupování přes
elektronický obchod množství zboží v košíku, většinou je to provedeno a
potom je Vám obsah košíku
zobrazen). Rovněž někdy nebývá tak důležité zamezit opakované
aktualizaci řádku způsobené pohybem v historii dokumentů nebo
refreshováním stránky. PříkladMy jsme si ve třicátém dílu našeho seriálu vytvořili počitadlo, které ukládalo údaje o počtu návštěv na stránce do textového souboru. Zkusme si nyní tento triviální příklad přepsat tak, aby používal jako úložiště databázi! Definice tabulky bude opravdu primitivní: create table pocitadlo
(pocet int); A celý skript bude vypadat následovně: <?
Skript není kromě použití příkazu update opravdu ničím zajímavý.
Všimněte si, že jsem hned při definici tabulky nastavil výchozí hodnotu
počitadla na nulu, takže jsem se tím pak již nemusel zabývat v kódu PHP. Snad by se dala rozebrat jedna věc - z příkladu je vidět, že na
uložení opravdu jednoduchých informací většinou nejsou databáze
potřeba. Tento skript zcela určitě poběží déle než skript z třicátého
dílu, kde jsme ukládali stav počitadla do souboru, protože režie
spojená s připojením k databázi je téměř určitě větší než režie spojená
s otevřením souboru. Takže jsme použili přístup "s dělem na komára".
Ale čistě pro ukázku fungování příkazu UPDATE to postačilo. Pozn.: Tento skript však sám o
sobě řeší problém se souběžností. Jestliže by se totiž pokusilo více
uživatelů najednou přistupovat ke stránkám, na nichž počitadlo běží,
databáze by si s tím dokázala poradit. Logika zabraňující zničení dat v
případě vícenásobných přístupů je totiž v každé databázi již obsažena. Pozn.: V praxi to bývá tak, že
když už se výsledky počítání ukládají do databáze, používá se pro každý
přístup samostatný řádek. Neeviduje se jen počet přístupů, ale i další
věci, jako například IP adresa z níž byl přístup proveden, použitý
prohlížeč a tak dále. Je jasné, že pak by se použil INSERT, ne UPDATE. Použití UPDATE není ve skriptech tak časté jako SELECT nebo INSERT.
Kontrolujte data a dávejte si pozor, zda aktualizujete právě ty řádky,
které chcete skutečně měnit. A ještě jedna přátelská rada na závěr:
Jestliže ladíte kód hojně využívající UPDATE, ušetří Vám spoustu času,
když budete mít k dispozici zálohu databáze ;-)
Související články
Předchozí Celou kategorii (seriál) Další
PHP (1) - Historie a budoucnost
PHP (2) - Jak to funguje PHP (3) - Instalace PHP (4) - Základy syntaxe PHP (5) - Příkaz Echo; formátování kódu PHP (6) - Typy proměnných PHP (7) - Pole PHP (8) - Výrazy, konstanty, inkrementace PHP (9) - Přetypování proměnných PHP (10) - Logické výrazy a operátory PHP (11) - Operátory porovnání; priorita operátorů PHP (12) - Podmínky PHP (13) - Příkazy cyklu PHP (14) - Cyklus for PHP (15) - Funkce PHP (16) - Vyrobme si kalendář PHP (17) - Dokončujeme kalendář PHP (18) - Funkce pro práci s poli PHP (19) - Objekty PHP (20) - Objekty podruhé PHP (21) - Vkládání souborů PHP (22) - Regulární výrazy PHP (23) - Neztraťte se ve funkcích PHP (24) - Pracujeme s formuláři PHP (25) - Formuláře - nikomu nevěřte PHP (26) - Formuláře na sto způsobů PHP (27) - Příklady na formuláře PHP (28) - Chybovati je lidské PHP (29) - Soubory a adresáře PHP (30) - Počitadlo pomocí souborů PHP (31) - Upload a download souborů PHP (32) - Příklad na BLOG PHP (33) - HTTP hlavičky PHP (34) - Úvod do databází PHP (35) - Uložení dat v databázi PHP (36) - Připojujeme se k MySQL PHP (37) - Tvorba tabulek v MySQL PHP (38) - Dolujeme data z MySQL PHP (39) - Zobrazujeme a stránkujeme data PHP (40) - PHP a vkládání záznamů do databází PHP (42) - Odstraňujeme databázová data PHP (43) - MySQL rychleji a rychleji PHP (44) - MySQL ještě rychleji PHP (45) - Jsou data v databázi v bezpečí? PHP (46) - Importujeme data do databáze PHP (47) - Exportujeme data PHP (48) - Práce s binárními daty (BLOB) PHP (49) - Kam kráčíš, MySQL? PHP (50) - Ověřování uživatelů PHP (51) - Přenos dat mezi stránkami PHP (52) - Cookies PHP (53) - Sessions PHP (54) - Dodržování webových standardů PHP (55) - Odesílání e-mailů PHP (56) - Tisk a PDF PHP (57) - XML PHP (58) - XML lépe a radostněji PHP (59) - zapisujeme XML PHP (60) - Rozsáhlejší projekty 1. PHP (61) - Rozsáhlejší projekty 2. PHP (62) - Rozsáhlejší projekty 3. PHP (63) - Rozsáhlejší projekty 4. PHP (64) - Ladění kódu PHP (65) - Ladění kódu 2. PHP (66) - PHP debugger PHP (67) - Zdroje informací o PHP PHP (68) - Stavíme portál PHP (69) - Stavíme portál 2. PHP (70) - Registrace uživatelů na portálu PHP (71) - Přihlašování uživatelů na portál PHP (72) - Hrátky s uživateli PHP (73) - Frontend a backend PHP (74) - Administrátorské rozhraní portálu PHP (75) - Pokračujeme na portále PHP (76) - Zobrazujeme data na portále PHP (77) - Portál, databáze a relace PHP (78) - Informační obsah portálu PHP (79) - Triky s formuláři a ergonomie webu PHP (80) - Administrace diskografie hudebního portálu PHP (81) - Uživatel versus programátor PHP (82) - zabezpečení vstupů formulářů PHP (83) - Ukládání textů písní na hudebním portále PHP (84) - Ještě k registraci PHP (85) - ukládání souborů do databáze na portálu PHP (86) - zobrazení dat a stahování soborů pro registrované PHP (87) - finišujeme portál PHP (88) - provoz ve Windows PHP (89) - cesta do hlubin php.ini PHP (90) - Poťouchlé konfigurační volby PHP (91) - php.ini potřetí a naposledy PHP (92) - funkce pro interakci s operačním systémem PHP (93) - příkazový řádek PHP (94) - GUI PHP (95) - GUI podruhé PHP (96) - (ne)bezpečné PHP PHP (97) - bezpečnost ještě jednou PHP (98) - PHP 5. PHP (99) - Budoucnost PHP PHP (100) - Závěr PHP (101) - Apríl: Příklady z praxe php rewrite Byte order mark a PHP Předchozí Celou kategorii (seriál) Další Ke stažení jako HTML nebo jako PDF.
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |