abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:55 | IT novinky

    Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.

    Ladislav Hagara | Komentářů: 5
    dnes 11:44 | Zajímavý software

    NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    dnes 10:55 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | IT novinky

    IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.

    Ladislav Hagara | Komentářů: 0
    včera 10:44 | Zajímavý článek

    Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.

    Ladislav Hagara | Komentářů: 32
    včera 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    5.6. 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 10
    5.6. 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    5.6. 10:22 | Nová verze

    Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

    Ladislav Hagara | Komentářů: 2
    Rozcestník

    Vychytávky v MySQL

    27.7.2008 21:44 | Přečteno: 8500× | Výběrový blog | poslední úprava: 27.7.2008 21:54

    Aneb co jsem všechno nevěděl a nikdy mi to nechybělo ;) ale je to zajímavý.. tak jsem se trošku přivzdělal a udělal jsem si následující výcuc. Třeba se někdo dozvíte taky něco novýho.
    Pro pohodlnější počteníčko doporučuji formát PDF.

    MySQL

    Typy tabulek – Storage Engines

    Tabulky nepodporující transakce (MyISAM) jsou rychlejší, zabírají méně místa na disku a potřebují méně paměti pro UPDATE.

    MyISAM na data, z nichž se často vybírá pomocí SELECT a InnoDB na data, která se často mění.

    CREATE TABLE t (i INT) ENGINE = INNODB;
    ALTER TABLE t ENGINE = MYISAM;

    Místo ENGINE se dříve používalo TYPE a tento termín je zachován z důvodu zpětné kompatibility.

    Indexy

    Zrychlení přístupu k datům.

    Používat u všech sloupců, podle kterých se vyhledává, třídí nebo podle kterých se spojují tabulky.

    Nepoužívat u tabulek, do kterých se převážně vkládá a jen výjimečně se z nich čte (např. logy).

    Transakce – Transactions

    Provedení několika činností dohromady jako jedné.

    START TRANSACTION

    Zahájí neboli odstartuje transakci. Veškeré příkazy zadané později jsou součástí transakce a navenek se tedy budou jevit jako jediný příkaz.

    COMMIT

    Aktuální transakce je potvrzena. Změny jsou zapsány do databáze.

    ROLLBACK

    Aktuální transakce je zamítnuta. Všechny provedené změny jsou zrušeny a databáze se vrátí do stavu, v němž byla před zahájením transakce.

    START TRANSACTION;
    UPDATE platy SET plat=plat+2000 WHERE plat < 15000;
    UPDATE platy SET plat=plat*1.1;
    COMMIT; 

    Při použití InnoDB je transakce každý samostatný příkaz. Tzn. okolo transakce složené z jednoho příkazu není třeba psát START TRANSACTION a COMMIT.

    SELECT * FROM cosi;

    Předchozí příkaz provede ve skutečnosti toto:

    START TRANSACTION; SELECT * FROM cosi; COMMIT;

    Během provádění transakce všechny ostatní pokusy o práci nad stejnými daty čekají.

    Cizí klíče – Foreign keys

    V databázi máme následující tabulky:

    Každý záznam psa má uvedené id majitele. Proto označíme v tabulce psi sloupec majitel jako cizí klíč, vztažený k sloupci osoba_id v tabulce osoby.

    Když je poté přidán záznam pro psa, databázový engine bude vyžadovat, aby číslo v poli majitel nabývalo některé z existujících hodnot osoba_id tabulky osoby. Zároveň můžeme určit, zda se při smazání osoby smažou i záznamy všech vlastněných psů, nebo zda má pokus o smazání osoby vlastnící alespoň jednoho psa selhat.

    Nastavení v phpMyAdmin pod odkazem Zobrazit relace na stránce struktury tabulky.

    Tabulka musí být typu InnoDB.

    ALTER TABLE psi
    ADD FOREIGN KEY(majitel)
    REFERENCES osoby(osoba_id)
    ON UPDATE CASCADE	# změna id chovatele = změna i u všech jeho psů
    				# RESTRICT – zabránění změně id chovatele
    ON DELETE RESTRICT;	# chovatel nemůže být smazán pokud má nějaké psy
    				# CASCADE – smazání chovatele = smazání i jeho psů
    				# SET NULL – nastaví majitele na NULL

    Pohledy – Views

    Statické dotazy, s nimiž lze pracovat, jako by to byly tabulky (Pojmenované SELECTy). V MySQL od verze 5.0.

    CREATE VIEW vwPracovnici AS SELECT * FROM pracovnici;
    SELECT * FROM vwPracovnici;
    CREATE VIEW vwPrumernyVek AS SELECT AVG(vek) AS prumer FROM pracovnici;
    CREATE VIEW vwDobNeurc AS SELECT * FROM pracovnici WHERE zam_do IS NULL;
    CREATE VIEW vwLidi AS SELECT prijmeni FROM pracovnici ORDER BY prijmeni; 

    PhpMyAdmin zobrazí existující pohledy v seznamu tabulek.

    Spojování tabulek

    SELECT * FROM knihy, druhy;

    Každý řádek s každým spojeny na jednom řádku – kartézský součin. Ke každé knize všechny druhy, které existují. My ale chceme knihu a její druh na jednom řádku. Vybereme tedy řádky kde druh z tabulky knihy se rovná id z tab. druhy.

    SELECT * FROM knihy, druhy WHERE knihy.druh = druhy.id;
    SELECT * FROM knihy INNER JOIN druhy ON knihy.druh = druhy.id [WHERE … ORDER BY …];

    K výpisu i knih, které nemají nastavený druh (vypíše všechny z levé tabulky – podle LEFT/RIGHT – a k nim přiřadí z té druhé podle výrazu):

    … FROM knihy LEFT JOIN druhy ON knihy.druh = druhy.id;
    … FROM druhy RIGHT JOIN knihy ON knihy.druh = druhy.id;

    2× totéž.

    Poddotazy – Subqueries

    SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
    SELECT * FROM lidi WHERE mesto IN (SELECT mesto FROM mesta);

    Uložené procedury – Stored procedures

    Sada příkazů SQL, které jsou uložené na serveru a zkompilované pro rychlejší použití. V MySQL od verze 5.0.

    CREATE PROCEDURE spVratRadky (od INT, do INT)
    BEGIN
      SELECT * FROM software WHERE id BETWEEN od AND do;
    END
    CALL spVratRadky(10, 20) 

    Při opakovaném spuštění bude následující příkaz cca o 25-30% rychlejší než prostá sada INSERTů.

    create procedure sp_vlozradek(id INT, nazev VARCHAR(50))
    BEGIN
      INSERT INTO software (id, nazev) VALUES (id, nazev);
    END



    CREATE PROCEDURE sp_vlozneboaktualizuj (radek INT, novynazev VARCHAR(50))
    BEGIN
      IF EXISTS(SELECT * FROM software WHERE id = radek) THEN
        UPDATE software SET nazev = novynazev WHERE id = radek;
      ELSE
        INSERT INTO software (id, nazev) VALUES (radek, novynazev);
      END IF;
    END



    CREATE PROCEDURE spkalendar()
    BEGIN
      DECLARE den DATE;
      SET den = CURDATE();
      CREATE TEMPORARY TABLE dny (datum DATE);
      WHILE den < (CURDATE() + INTERVAL 30 DAY) DO
        INSERT INTO dny (datum) VALUES (den);
        SET den = den + INTERVAL 1 DAY;
      END WHILE;
      SELECT datum FROM dny;
    END

    Nejprve je vytvořena prázdná dočasná tabulka a je zjištěno dnešní datum. Pak je ve smyčce WHILE přičteno postupně 30 dnů a výsledky jsou průběžně ukládány do dočasné tabulky. Nakonec je obsah této dočasné tabulky vrácen jako výsledek.

    Trigger

    Uložená procedura, která se spouští v souvislosti (před nebo po) s provedením nějakého akčního dotazu (UPDATE, DELETE,... , ne SELECT) na tabulce. Nic nevrací a nemá parametry.

    CREATE TRIGGER trBackup
    BEFORE DELETE
    ON tabulka
    FOR EACH ROW
    BEGIN
      INSERT INTO tabulka_zaloha(id, jmeno, plat, cas_odstraneni, uzivatel)
      VALUES (old.id, old.jmeno, old.plat, NOW(), USER());
    END; 

    Možné akce: BEFORE/AFTER INSERT/UPDATE/DELETE

    Pro každou akci nejvýše jeden trigger, každý trigger pouze pro jednu akci.

    Triggery mají přístup k měněným datům přes virtuální tabulky old a new.

    CREATE TRIGGER trMaxPlat
    BEFORE INSERT
    ON tabulka
    FOR EACH ROW
    BEGIN
      IF new.plat>30000 THEN /*něco, co akci zruší*/;
      END IF;
    END;

    Bohužel pro „něco, co akci zruší“ neexistuje žádný příkaz, je třeba vyvolat nějakou chybu.

    Uživatelsky definované funkce – UDF

    CREATE FUNCTION mesicslovy (mesic TINYINT)
    RETURNS VARCHAR (9)
    BEGIN
    RETURN CASE mesic
      WHEN 1 THEN 'ledna'
      WHEN 2 THEN 'února'
      ...
      WHEN 12 THEN 'prosince'
    END;
    END

    Zdroje

    MySQL 5.0 Reference Manual

    Seriál MySQL na Linuxsoft.cz

    PHP triky

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Přemek Vyhnal avatar 27.7.2008 21:46 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Příloha:
    Zápisek s lepším formátováním v PDF v příloze.
    NO RAPTORS!
    Daniel Kvasnička ml. avatar 27.7.2008 22:05 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Yep, foreign keys jsou super. Usetri to plno nudneho kodu v samotne aplikaci. To i ten fulltext ozelim.
    FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
    29.7.2008 19:53 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Škoda, že foreign keys nejdou deklarovat rovnou u deklarace sloupce v create table, např. "CREATE TABLE osoba (id INT PRIMARY KEY); CREATE TABLE pes (id INT PRIMARY KEY, majitel INT REFERENCES osoba);". V PostgreSQL to funguje, ale MySQL to nejen že neumí, ale ani se nijak netváří, že to neumí. Tak se taky nespalte :-)
    default avatar 30.7.2008 10:32 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Všechny databáze, které používám, toto umí, ale nepoužívám to. Důvod je jednoduchý: když máte dvě tabulky, které jsou na sobě závislé, nelze je takto vytvořit sekvenčně. Vždy se u jedné musí udělat dodatečný ALTER TABLE … ADD CONSTRAINT…. Takže pro jednoduchost a přehlednost dělám vše přes ALTER TABLE a žiju si spokojeně. I pro sestavování deployment skriptů a jejich správu je toto řešení pro mě lepší :-)
    2.8.2008 19:54 kaja47 | blog:
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    leda vypnot kontrolu závislosí na začítku skrtipu pomocí SET FOREIGN_KEY_CHECKS = 0; a na konci jí zase zapnout, to by pak mohlo jít.
    29.7.2008 20:24 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Zajímavé, jak jsou někteří lidé selektivní. :-) Stěžují si na to, že se nikdo nestará o Python psaný v Javě, ale o cizích klíčích, bez kterých podle doktora Codda databáze vůbec nemá nárok říkat si RDBMS, prohlásí jen to, že "jsou super a ušetří spoustu nudného kódu", a určitě by se neštítil používat ji i bez nich, jako by se nic nedělo. :-D
    Luk avatar 29.7.2008 20:38 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    No, někteří lidé se ani na úroveň cizích klíčů nedostanou - jako třeba tvůrce "databáze" popsané v části Kalvárie údržby kódu :-D
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Dalibor Smolík avatar 30.7.2008 09:35 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Jo. Cizí klíče - občas se to hodí :-). Někdy potřebuji zrušit fakturu, která se skládá z tabulky pro společné údaje a z tabulky pro zboží, řešil jsem to skriptem PHP, který nejprve provede výmaz v tabulce pro zboží a pak v tabulce pro společné údaje, když jsem zjistil, že se to dá provést mnohem elegantněji ;-)
    Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
    30.7.2008 11:51 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Tohle není ani tak záležitost foreign keys, ale spíš toho, že si napíšete proceduru nebo trigger nebo máte v jazyce vychytávky typu 'on delete cascade' (což vlastně v podstatě je zase jen trigger). Smysl foreign keys je v tom, že engine sám se stará o to, aby se vám v databázi z jakéhokoli důvodu (třeba chybně napsané klientské aplikace) neobjevily položky bez faktury.
    Dalibor Smolík avatar 30.7.2008 13:18 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Jasně, díky za osvětlení :-) - u mně se položky bez faktury nemohou vyskytnout, protože v tabulce fakturace - zboží je jedno pole s uvedením čísla faktury, stejné pole je i v tabulce pro společné údaje pro fakturu. Když v této tabulce pro společné údaje zruším fakturu, měly by zmizet automaticky všechny řádky s uvedením tohoto čísla faktury ve druhé tabulce. A to by foreign key mohl řešit (stejně tak asi i transakce) .. Jak jsem psal, mám to řešené pouze systémem příkazů ve skriptu PHP.
    Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
    30.7.2008 13:25 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    práveže v db bez foreign keys, tak taký záznam (omylom) existovať môže. stačí jednoduchý update či chyba v skripte (v prípade php a mysql môže byť ten skript aj správny) :-)
    30.7.2008 14:48 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Tohle řeší spíš ten trigger (nebo 'on delete cascade'). Smysl foreign key je hlavně v tom, že vám tam ty položky odkazující na neexistující fakturu nemohou vzniknout ani v případě, že se je tam úmyslně pokusíte vytvořit (pokud nebudete hodně důmyslný a ten constraint nevypnete). Tedy ani ne tak vy, ale hlavně chybně napsaná klientská aplikace. Na takové narušení konzistence dat v databázi se totiž může přijít až po delší době a pak už je často extrémně těžké (až nemožné) to dát dohromady.
    29.7.2008 22:17 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Vždycky jsem si říkal, jaké jsem měl ohromné štěstí, že první databáze, kterou jsem potkal, nebyla MySQL. :-)
    29.7.2008 22:38 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Myslím, že u mě to byl Informix, ale ne ze strany uživatele. :-D Jako uživatel jsem kouknul na MySQL, ale po spatření textů typu "transakce nepotřebujeme, ale zato jsme brutálně rychlí, a vůbec, atomické updaty řádků většině lidí stačí a zbytek se ošetří v aplikaci" spojených s naprosto otřesným překladem jsem odhodil jak onu knihu, tak i MySQL a nakonec objevil Firebird 1.0.3 a knihu Pavla Císaře. :-) (A všechno završil tím, že jsem si sedl a popovídal s Jimem Starkeym u piva, když byl v Praze. :-))
    29.7.2008 23:11 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    "transakce nepotřebujeme, ale zato jsme brutálně rychlí, a vůbec, atomické updaty řádků většině lidí stačí a zbytek se ošetří v aplikaci"
    Tu knihu psal někdo od eBaye? :-D
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    29.7.2008 23:23 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Nějaký střelený Polák. ;-) Tohle to bylo. Tehdy jsem byl ještě mladej a blbej (dneska už jsem jenom blbej :-D), tak jsem nevěděl, že 1) kupovat překlady a 2) kupovat knihy typu "Naučte se X za Y dní" (případně až extrémy typu "Naučte se SAP R/3 za patnáct minut" :-D) je fakt spíš ruská ruleta než promyšlená koupě. Teď už kupuju jen hodnotnou literaturu. ;-)
    29.7.2008 23:21 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    foxpro a debefka s indexy na tebe! to by sis pak jinak vazil mysql! ;-]

    btw. muj prvni db-stroj se kterym jsem valcil byl interbase... az se divim, co vsechno s tim slo pred deseti lety delat a co z toho uz jde i v mysql
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    29.7.2008 23:25 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Spíš tak před patnácti, ne? ;-) Nebo aspoň Interbase před deseti lety a Interbase před patnácti mi přišly historicky tak nějak skoro stejné, on se Borland nijak zvlášť ve vývoji nepřetrhl, aspoň pokud je mi známo.
    29.7.2008 23:50 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    no, tak to nedokazu posoudit, protoze pred patnacti lety jsem jeste mastil programy na osmibitech. ale pred deseti lety uz jsem mastil programy v delphi a s interbaskou.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    30.7.2008 01:44 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL

    Nejen vývoj, ale i marketing… Skoro bych řekl, že se Interbase snažili nechat tiše upadnout v zapomnění a o kvalitě projektu svědčí fakt, že se jim to přes veškerou snahu nepodařilo. Teď sice zase nějaký vývoj probíhá, ale připadá mi, že je to spíš natruc Firebirdu než ze zájmu o produkt samotný.

    Ale co čekat od firmy, která každých pár let změní název a ještě častěji strategii a vytrvale se snaží vrhat energii jakýmkoli směrem kromě toho, v čem se jim daří?

    30.7.2008 01:36 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    foxpro a debefka s indexy na tebe! to by sis pak jinak vazil mysql! ;-]

    No, bereme-li to až takhle, tak první byla dBase III. Ale měl jsem na mysli spíš Interbase 6.0 beta.

    interbase... az se divim, co vsechno s tim slo pred deseti lety delat a co z toho uz jde i v mysql

    Ve skutečnosti je to ještě horší - spousta z těch věcí, které se v MySQL objevily s velkou slávou v posledních letech, byla v Interbase (která se tehdy ještě nejmenovala Interbase) před více než dvaceti lety…

    30.7.2008 02:41 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL

    To by sedlo, Hot Backup v MySQL teprv bude (možná :-D), pokud vím, a v Interbase zaručeně fungoval za plného chodu už v roce 1988 ve verzi 3 nebo tak nějak. :-)

    Což mi připomnělo i tohle - aneb co uměla (a kde byla nasazována) Interbase v době, kdy autoři MySQL teprv zkusmo lepili cizí SQL frontend na první vývojovou verzi vlastního ISAM backendu. Skoro mi přijde, že začátky obou systémů docela pěkně odrážejí celé jejich další směrování. Přičemž u Interbase na začátku nebyl čtyřicet let starý (a zastaralý) ISAM, ale v té době revoluční verzovací transakční engine, který pak spousta lidí sprostě (a špatně :-)) vobšlehla, včetně Oraclu ("nefíčury" Oraclu před rokem 1992 jsou kapitola sama pro sebe :-)), PostgreSQL a MS SQL Serveru 2005. (A ano, jsem Smug Firebird Weenie a ještě to drze přiznávám. :-D)

    30.7.2008 11:23 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    v dBase III+ jsem jeste neco delal na skole, ale bylo to silene, ale ve foxpro jsem delal skutecne programy... a byl to zazitek... nejvetsi sranda je, ze jeste dneska se daji na spouste mist najit programy napsane ve foxpro 2.x...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    default avatar 30.7.2008 10:42 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Já si to říkám i teď :-D
    27.7.2008 22:06 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Šikovný zápisek, díky. K odkazům doplňuji:

    Seriál: Tvorba databází v MySQL a Seriál: Správa databází v MySQL.
    Luk avatar 27.7.2008 22:11 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Při použití InnoDB je transakce každý samostatný příkaz. Tzn. okolo transakce složené z jednoho příkazu není třeba psát START TRANSACTION a COMMIT.
    Tohle platí jen v případě, že je zapnutý autocommit (výchozí stav). Lze ovšem vypnout (SET AUTOCOMMIT=0) a pak se musí každá transakce zahájit a ukončit. Pokud se při zapnutém autocommitu zavolá START TRANSACTION, autocommit se do dokončení této transakce vypne (pak se zase sám zapne).
    Během provádění transakce všechny ostatní pokusy o práci nad stejnými daty čekají.
    Opět platí jen částečně. Do jaké míry bude přístup k datům zamykán, záleží na nastavení izolace transakcí.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    29.7.2008 09:58 Robo
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    S MySQL som moc casto nerobil. Tak mam dve otazky:
    1. Ak defaultne zadam nejaky UPDATE statement, rovno ho commitne?
    2. Ak je autocommit vypnuty a zadam UPDATE statement, hodi chybu, ze chyba zaciatok transakcie alebo transakciu zacne automaticky (ako napr. Oracle) a potom ju staci commitnut?

    este jedna otazka, ak jeden user update-uje tabulku, lockne sa cela tabulka alebo iba dane riadky?
    29.7.2008 10:35 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    K tomu poslednímu poslední: U MyISAM jedině celá, u BDB enginu stránky, u InnoDB jen dané řádky, jestli se nepletu. A optimistické zamykání asi v nedohlednu. :-D
    Luk avatar 29.7.2008 10:35 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    1. Ak defaultne zadam nejaky UPDATE statement, rovno ho commitne?
    Ano. Možná to z té věty nebylo dostatečně zřejmé ;-)
    2. Ak je autocommit vypnuty a zadam UPDATE statement, hodi chybu, ze chyba zaciatok transakcie alebo transakciu zacne automaticky (ako napr. Oracle) a potom ju staci commitnut?
    Za b) je správně - začne transakci automaticky. Při použití je ale velkou chybou na to spoléhat, velmi snadno to totiž vede k tomu, že se pak člověk diví, proč mu něco nefunguje (když neví, jestli jestli je zrovna autocommit zapnutý). Když se pracuje s transakcemi, vždy je dobré používat START TRANSACTION, ať je autocommit zapnutý nebo ne.
    este jedna otazka, ak jeden user update-uje tabulku, lockne sa cela tabulka alebo iba dane riadky?
    Zamykání závisí na úrovni izolace (např. při READ UNCOMMITED se pro čtení nezamyká vůbec - ostatní uživatelé mohou tedy dostat data, která následně nebudou potvrzena). Celá tabulka se ale nezamyká nikdy, pokud se nezamkne explicitně. Explicitní zamykání celé tabulky ale není kompatibilní s transakcemi. Pokud se dá LOCK TABLES, automaticky to způsobí COMMIT. Naopak příkaz START TRANSACTION automaticky vyvolá UNLOCK TABLES.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    Luk avatar 29.7.2008 10:37 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    To o tom zamykání vztahuji samozřejmě k InnoDB, pro ostatní enginy (bez transakcí) to už popsal Kyosuke (a asi správně).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    hikikomori82 avatar 27.7.2008 22:24 hikikomori82 | skóre: 18 | blog: foobar | Košice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    To je sice pekne, ale ked ide o nasadenie v realnom prostredi, treba zrazu riesit rozdielne verzie db, prava, uzivatelov a podobne sracky, prave dnes som musel jeden before update trigger zrusit a do kodu rucne doplnit co ten trigger robil lebo to neslo, myslim ze sa do buducna tomuto vyhnem a necham to KISS (keep it simple, stupid).
    27.7.2008 22:30 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    co jsem všechno nevěděl a nikdy mi to nechybělo
    a to jste predtim mysql i nejak pouzival?
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    Přemek Vyhnal avatar 27.7.2008 23:08 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    a to jste predtim mysql i nejak pouzival?
    ano, spokojeně ;)
    NO RAPTORS!
    28.7.2008 00:16 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    :-]] zrejme slusny oddil...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    xkucf03 avatar 28.7.2008 22:50 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Taky jsem takhle začínal - asi v patnácti jsem vzal MySQL a v phpMyAdminovi si naklikal nějaké ty tabulky, SQL (tehdy jen selekty) jsem se učil za chodu, z DB jsem prakticky nic nevyužíval, všechno bylo v aplikační vrstvě. A jak pěkně mi to fungovalo :-)

    Dneska si bez cizích klíčů, transakcí a spojování tabulek nedokážu práci s (relační) databází představit.

    Výcuc je celkem fajn, třeba někomu pomůže, aby nezačínal tak blbě jako já, takže díky za něj.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    27.7.2008 23:21 JohnnyDoe | skóre: 11 | blog: _
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    InnoDB – transakce, cizí klíče, neumí fulltext (a nebo už ano?)
    Je zde někdo znalý, kdo ví, jaký je současný/budoucí stav fulltextu v InnoDB? Nebo pořád platí ten trik s paralelním vytvářením dvou tabulek se stejnými daty, ale s jednou InnoDB a na fultext s druhou MyISAM?
    Luk avatar 28.7.2008 00:03 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Je zde někdo znalý, kdo ví, jaký je současný/budoucí stav fulltextu v InnoDB?
    Vypadá to špatně. Už to tam hnije skoro 3 roky a zatím nikdo nedal na vědomí, že by se to pohnulo kupředu. Ale to není ojedinělé - dlouho tam zahnívají i velmi záludné a ošklivé chyby (jako třeba tato, která zřejmě způsobuje poškození haldy - u verze 4 měla za následek zátuh serveru, verze 5 se při jejím výskytu aspoň sama restartuje).
    Nebo pořád platí ten trik s paralelním vytvářením dvou tabulek se stejnými daty, ale s jednou InnoDB a na fultext s druhou MyISAM?
    Ano.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    27.7.2008 23:30 jenda
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    v budoucnu, az bude zpracovani dat neco obycejneho jako strojni soucasti, prvky obvodu nebo technicka zarizeni budov, budou studenti konfrontovani s technickymi a historickymi otazkami z oblasti zpracovani informaci:

    - vyjmenujte situace v provozu zpracovani dat, kdy jsou tzv. cizi klice prekazkou

    - vyjmenujte situace, ve kterych je povoleno pouziti cizich klicu pres jejich nesporne nevyhody

    - z historie je znama profese 'administrator rel. db. systemu'. Vyjmenujte nektere z tehdejsich nesmyslnych pracovnich cinnosti teto drivejsi profese a zduvodnete, co vedlo k jejimu zaniku.

    - predstavte si, ze by jste meli v minulosti sabotovat zavedeni nejakeho informacniho systemu. Zduvodnete, ktera z uvedenych metod by byla tenkrat vyhodnejsi: extenzivni vyuziti cizich klicu se soucasnym loadem dat z tabulkoveho procesoru nebo vyuziti komplikovanch union-selectu s max. isolation-level

    - vysvetlete, proc v drivejsich dobach se vyskytovaly na internetu stamiliony dotazu ohledne chyb v select-statementech i kdyz tyto jsa odvozeny z lidske reci by mely byt pro uzivatele 'prirozene' pouzitelne.

    - jmenujte rok prvni pgsql-mysql valky a vyjmenujte hlavni argumenty myisam frakce.
    pavlix avatar 27.7.2008 23:53 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Aneb... jak se z MySQL snaží udělat velkou databázi a implementovat alespoň částečně věci, které jiné umějí už dávno (včetně třeba opensource PostgreSQL).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Luk avatar 28.7.2008 00:08 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Ovšem původnímu tvůrci se to nelíbí a udělal odlehčený fork ;-)
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    28.7.2008 04:54 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Já nevím, ale proč "velkou databázi"? Tyhlety věci už před dvaceti lety uměly i malé databáze. A to i včetně takových fičurek, jako je zabalení změn schématu databáze do transakcí a líných aktualizací fyzických řádků. (MySQL prý udělá novou kopii tabulky a dokud ji celou nepředělá, tak se do toho nedá zapisovat. Plus nějaké to místo na disku navíc, že? :-) Ale kdo ví, když se kucí švédský sluníčkový budou hodně snažit, tak se do roku 1985 třeba brzy dostanou taky... :-))
    pavlix avatar 29.7.2008 01:20 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    Třeba jo :). Ale nedej bože, aby pak z PHP udělali programovací jazyk.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    default avatar 30.7.2008 10:41 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    SELECT * FROM lidi WHERE mesto IN (SELECT mesto FROM mesta)
    A funguje už
    SELECT
        *
    FROM
        table1 t1 INNER JOIN (SELECT
                tx.col1, tx.col2
            FROM
                table2 tx) t2
        ON (t1.colx = t2.col2)
    /
    
    nebo se ještě pořád musí jezdit do serverovny mačkat tlačítko Reset?
    Luk avatar 30.7.2008 11:16 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Vychytávky v MySQL
    nebo se ještě pořád musí jezdit do serverovny mačkat tlačítko Reset?
    Každopádně u verze 5 platí, že když se něco podělá, tak se to samo restartuje - narozdíl od verze 4, která se sekla (např. kvůli této chybě).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.