abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
dnes 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 2
dnes 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 1
včera 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 16
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 28
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 3
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 56
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
16.2. 23:13 | Nová verze

Byla vydána verze 0.92.1 svobodného multiplatformního vektorového grafického editoru Inkscape. Přehled novinek v poznámkách k vydání. Řešen je mimo jiné problém s verzí 0.92, jež rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Více v příspěvku na blogu Davida Revoye, autora open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 666 hlasů
 Komentářů: 53, poslední dnes 18:38
Rozcestník
Reklama

Dotaz: mysql zavislost vice tabulek - cizi klic?

25.11.2009 01:09 fg
mysql zavislost vice tabulek - cizi klic?
Přečteno: 2105×
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.