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 13:00 | Nová verze

    Komunita kolem Linuxu From Scratch (LFS) vydala Linux From Scratch 12.1 a Linux From Scratch 12.1 se systemd. Nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů přichází s Glibc 2.39, Binutils 2.42 a Linuxem 6.7.4. Současně bylo oznámeno vydání verze 12.1 knih Beyond Linux From Scratch (BLFS) a Beyond Linux From Scratch se systemd.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Upozornění

    Google blokuje Chaty RCS (Rich Communication Services neboli rozšířené komunikační služby) na telefonech s rootnutým Androidem nebo odemčeným zavaděčem [9to5Google].

    Ladislav Hagara | Komentářů: 7
    včera 12:22 | Komunita

    Bylo spuštěno hlasování o přednáškách a workshopech pro letošní Installfest, jenž proběhne o víkendu 16. a 17. března v Praze na Karlově náměstí 13. O open source hardwaru bude přednášet Mitch Altman.

    Ladislav Hagara | Komentářů: 1
    včera 08:00 | IT novinky

    Počítač NitroPC Pro 2 od společnosti Nitrokey s corebootem Dasharo byl oficiálně certifikován pro Qubes OS verze 4. Qubes OS (Wikipedie) je svobodný a otevřený operační systém zaměřený na bezpečnost desktopu.

    Ladislav Hagara | Komentářů: 1
    včera 07:00 | Nová verze

    Mobilní operační systém /e/OS (Wikipedie) založený na Androidu / LineageOS, ale bez aplikací a služeb od Googlu, byl vydán ve verzi 1.20. Přehled novinek na GitLabu.

    Ladislav Hagara | Komentářů: 17
    29.2. 13:00 | IT novinky

    Jednodeskový počítač Raspberry Pi slaví 12 let. Prodej byl spuštěn 29. února 2012 (Wikipedie, 𝕏).

    Ladislav Hagara | Komentářů: 13
    29.2. 12:00 | Nová verze

    Byla vydána verze 3.2 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.

    Ladislav Hagara | Komentářů: 0
    29.2. 11:44 | Nová verze

    Byla vydána nová verze 1.6.0 grafického správce diskových oddílů GParted (GNOME Partition Editor) a také verze 1.6.0 živé distribuce GParted Live, která obsahuje tohoto správce a další nástroje pro zálohování či obnovu dat. Linux byl povýšen na verzi 6.6.15-2.

    Ladislav Hagara | Komentářů: 8
    29.2. 06:00 | Nová verze Ladislav Hagara | Komentářů: 0
    28.2. 22:44 | Nová verze

    Byla vydána (𝕏) únorová aktualizace aneb nová verze 1.87 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.87 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 16
    Steam
     (19%)
     (29%)
     (8%)
     (12%)
     (33%)
    Celkem 52 hlasů
     Komentářů: 0
    Rozcestník

    Dotaz: mysql zavislost vice tabulek - cizi klic?

    25.11.2009 01:09 fg
    mysql zavislost vice tabulek - cizi klic?
    Přečteno: 2157×
    Mam nasledujici schema:
    tabulka1
    jmeno heslo
    
    tabulka2
    jmeno data1 data2 ...
    
    tabulka3
    jmeno data1 da...
    
    tabulka...
    
    Potreboval bych, aby kdyz uzivatel1 existuje alespon v nejake z tabulek tabulka2-tabulkaN, tak aby existoval i v tabulka1. Pokud by se vymazal uzivatel1 z nejake tabulky tabulka2-tabulkaN a uz v zadne z techto tabulek neexistoval, tak by se automaticky vymazal i z tabulka1. Vim jak tohle vyresit pomoci PHP, ale chtel bych si to co mozna nejvice zjednodusit a pokud tohle pujde udelat primo pomoci mysql, budu rad. Pujde to, jak?

    Pridani novych zaznamu by melo fungovat nejak takhle: pokud uzivatele1 pridam napr. do tabulka2, tak se automaticky prida do tabulka1 s heslem ze sloupce data1(v tabulka2). Potom uz si hesla nevsimam a jakakoliv zmena sloupce heslo ci sloupcu data1 v ostatnich tabulkach bude zcela nezavisla.

    Mam pocit, ze pokud nepujde to ostatni, tak alespon to automaticke mazani z tabulka1 v pripade neexistence uzivatele1 v ostatnich tabulkach by se dala udelat pomoci ciziho klice?

    Odpovědi

    25.11.2009 08:24 FooBar
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    No... prijde mi, ze chces cizi klic z tabulka2...N na sloupci jmeno na zaznam v tabulka1;)

    Ocekavej ale, ze narazis na takove vesele komplikaci, ze velmi casto pouzivany (mozna implicitni?) engine MySQL, zvany MyISAM, referencni integritu vubec neumi a napsat tam takovej constraint je pomalu na urovni komentare.;) Tudiz, pokud pouzivas MyISAM, nepomuzes si, musis prejit napr. na InnoDB.
    26.11.2009 20:41 fg
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Jenže já chci aby když v tabulka2 přidám uživatele, aby se přidal i v tabulka1, zatímco takový cizí klíč očekává že už v tabulka1 uživatel bude existovat. Takto by to mělo fungovat(tabulka: sloupec s uživateli):
    tabulka1: uživatel1 uživatel2 uživatel3
    tabulka2: uživatel1
    tabulka3: uživatel2 uživatel1
    tabulka4: uživatel3
    
    
    toto už správně není, protože uživatel1 neexistuje v žádných dalších tabulkách
    tabulka1: uživatel1 uživatel2
    tabulka2: 
    tabulka3: uživatel2
    tabulka4: uživatel3
    
    ani toto není správně, protože uživatel1 existuje v tabulka2, ale ne v tabulka1
    tabulka1: uživatel2 uživatel3
    tabulka2: uživatel1
    tabulka3: uživatel2
    tabulka4: uživatel3
    
    
    
    Na to bych asi potřeboval nějaké sofistikovanější propojení. Poradí někdo?
    27.11.2009 12:35 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    použi triggre a refcounter
    27.11.2009 14:25 fg
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Jaký refcounter? Jako že bych na každé z podřízených tabulek vytvořil trigger, že při insert se pokud neexistuje založí záznam v hlavní a při každém vytvoření bych v tabulka1 v sloupci pocet připočet jedničku. Pokud bych v podřízených tabulkých mazal, tak bych dekrementoval hodnotu v primární dokud by nebyla 0, v tom případě bych záznam odstranil. Byla ta rada tak myšlena nebo se to dá udělat jednodušeji?
    27.11.2009 14:44 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    áno, presne to som myslel. V prípade pridania/zmazania tabuľky nemusíš modifikovať všetko, len príslušnú tabuľku
    27.11.2009 16:11 fg
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Tak jsem chtěl dát ten mazací trigger přímo na hlavní tabulku, ale nejde spustit:
    CREATE TRIGGER tr_deleteNotUsed AFTER UPDATE ON users
      FOR EACH ROW BEGIN
        DELETE FROM users WHERE username=NEW.username AND used=0;
      END;
    
    po update tabulky to vrací: #1442 - Can't update table 'users' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 
    
    Dočetl jsem se že by to mohlo být kvůli zacyklení, ale tady se přeci nic necyklí. Kde dělám chybu?
    rADOn avatar 30.11.2009 20:11 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Pokousis se cyklicky mazat sam sebe coz je blbost. Na cisteni potrebujes vlastni triggery na kazde datove tabuli, ktere budou udrzovat pocet referenci a pripadne mazat uzivatele z hlavni tabule. Cili trigger mas vicemene dobre ale davas ho na spatnou tabuli.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    28.11.2009 09:50 FooBar
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Aha, vida, zmatlo mne zadani, ponevadz sice mluvis o sloupci heslo, ale to mas jen u tabulky 1 :)

    V tom pripade je to jasnej pripad pro triggery, ale prosimte, ten navrh zni dost silene. Zvazil bych, jestli to treba nechces delat jinak :)
    Tarmaq avatar 27.11.2009 16:36 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    nevim co vsechno umi MySQL, dlouho jsem s tim uz nedelal..
    Osobne bych to udelal tak, ze bych udelal pohled nad tabulkou1, joinujici tabulku2, tabulku3 .. tabulkuN a v insert/update triggeru vyresil rozstrkani prislusnych veci do tabulek.. u delete triggeru by to fungovalo podobne, mazalo by se z tabulky1 a o smazani ostatnich by se postaralo ON DELETE CASCADE na tom cizim klici
    Don't panic!
    27.11.2009 16:40 fg
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Jenže tak to fungovat nesmí. Po smazání uživatele z tabulka1(nešťastnou náhodou) se nesmí smazat nikde jinde.
    Tarmaq avatar 27.11.2009 16:52 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    nevim, mne to prijde jako hodne nestastne reseni navrhu databaze, to budou uzivatele naraz v X tabulkach a zadna z nich nebude autoritativni?
    Don't panic!
    27.11.2009 18:47 fg
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    Každá databáze = 1 aplikace. Pro autentizaci uživatelů se používá tabulka1. Ale pokud odstraním uživatele z tabulka1, nemohu ho smazat i z ostatních tabulek(protože to není jen o mazání záznamů, několik tabulek má přímou souvislost se soubory na pevném disku).. Jinak zdá se že jsem to už vyřešil. Vytvořil jsem rutinu, kterou spouští trigger na každé z podřízených db:
    DELIMITER $$
    
    CREATE TRIGGER tr_incrementMain AFTER INSERT ON users
      FOR EACH ROW BEGIN
        CALL auth.pr_authUsed(NEW.username,NEW.password,1);
      END;
    
    DELIMITER $$
    
    CREATE TRIGGER tr_decrementMain AFTER DELETE ON users
      FOR EACH ROW BEGIN
        CALL auth.pr_authUsed(OLD.username,"",0);
      END;
    
    
    
    
    DELIMITER $$
    
    CREATE PROCEDURE pr_authUsed (uzivatel CHAR(255), heslo CHAR(255), posun INT)
    BEGIN
    DECLARE usedValue INT; 
     IF (posun = 1) THEN BEGIN
      UPDATE `auth`.`users` SET `used` = used+1 WHERE `users`.`username` = uzivatel LIMIT 1;
      IF (ROW_COUNT()<1) THEN BEGIN
        INSERT INTO `auth`.`users` (`username`, `password`, `active`, `used`) VALUES (uzivatel,heslo,'1','1');
      END;
      END IF;
     END;
     ELSE BEGIN
      UPDATE `auth`.`users` SET `used` = used-1 WHERE `users`.`username` = uzivatel LIMIT 1 ;
      SELECT `used` INTO usedValue FROM `auth`.`users` WHERE `users`.`username` = uzivatel LIMIT 1 ;
      IF (usedValue < 1) THEN BEGIN
       DELETE FROM `auth`.`users` WHERE `username` = uzivatel LIMIT 1 ;
      END;
      END IF;
     END;
     END IF;
    END
    
    
    Tarmaq avatar 30.11.2009 12:51 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: mysql zavislost vice tabulek - cizi klic?
    V tom pripade bych uzivatele z tabulky1 vubec nemazal, jen bych mel pro kazdy modul/aplikaci samostatny sloupec, ktery by urcoval jestli tam ma pristup.. misto odstraneni z nejakeho modulu bych mu akorat zakazal pristup v tabulce1 a data by pritom zustala zachovana..
    Pokud je ale ten trigger vyhovujici, tak asi neni co resit..
    Don't panic!

    Založit nové vláknoNahoru

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

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