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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 23
dnes 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 4
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 14
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 15
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 4
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 773 hlasů
 Komentářů: 50, poslední 29.11. 15:50
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: 2099×
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.