Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem mysql a kaskády

Zkouším nyní přemigrovat své MSSQL tabulky do MySQL, ovšem nedaří se mi vytvořit Foreign key.. nestále mi to předělává na INDEX

ALTER TABLE `sk_grgr` ADD CONSTRAINT `SK_GRGR_FK1` FOREIGN KEY (`child_grou_grgr`) REFERENCES `sk_grou` (`id_grou`) ON DELETE CASCADE ON UPDATE NO ACTION;

takže když smažu nějaký záznam z sk_grou, tak podzáznam v sk_grgr tam zůstane, což je špatně

Předmět Autor Datum
skus vyhodit ON UPDATE NO ACTION
wam_Spider007 26.02.2012 12:17
wam_Spider007
to nepomohlo, on nevytvoří ani ten cizí klíč
tomas.kulhanek 26.02.2012 12:19
tomas.kulhanek
Este taka otazka, pouzivas InnoDB engine tabuliek? MySQL pouziva defaultne engine MyISAM, ktory cudz…
wam_Spider007 26.02.2012 12:20
wam_Spider007
nyní jsem udělal export tabulk CREATE TABLE `sk_grou` ( `id_grou` int(18) NOT NULL AUTO_INCREMENT,…
tomas.kulhanek 26.02.2012 12:21
tomas.kulhanek
jaký je rozdíl mezi všema engine? tu najdes prehladnu tabulku, co ktory engine podporuje a co nie h…
wam_Spider007 26.02.2012 12:23
wam_Spider007
Default engine as of MySQL 3.23 with great performance :-D:-D:-D
AZOR 26.02.2012 12:25
AZOR
na fulltext search je urcite velmi pouzitelny. inak je ten engine uplne k nicomu.
wam_Spider007 26.02.2012 12:30
wam_Spider007
Tak jako Oracle db mi to samozrejme pobavilo nejen ze o vykonu Mysql a O jeho kvalitach si myslim sv…
AZOR 26.02.2012 12:35
AZOR
porovnavat mysql s oracle je trochu nefer. Ano engines v mysql su trochu zhovadilost, ale ma to svoj…
wam_Spider007 26.02.2012 12:45
wam_Spider007
Nechtel jsem to srovnavat, spise mi to pobavilo. Chapu ze to ma svuj vyznam, ale nechapu proc je to…
AZOR 26.02.2012 12:54
AZOR
Tvoj priklad ma spravnu dedukciu, ale takto by to asi nikto (znaly problematiky) neriesil. Pokial ni…
wam_Spider007 26.02.2012 22:43
wam_Spider007
Nekdo znaly by to dal do InnoDB, ja tomu rozumim, jen si myslim ze kdyz nekdo alteruje tabulku ci re…
AZOR 26.02.2012 23:03
AZOR
Keď sme už pri tom, tak považovať prázdny reťazec za NULL je "úchylné chovanie" v Oracle by default.
los 26.02.2012 23:42
los
by default je to trosku jeste uchylnejsi ;) ne vzdy je povazovat prazdny retezec za NULL, v 99% prip… poslední
AZOR 26.02.2012 23:57
AZOR
takže asi všude používat default, ale tam kde chci cizí klíče, tak použiji innoDB
tomas.kulhanek 26.02.2012 12:30
tomas.kulhanek
ja mysql rozumim jako koza petrzeli, nicemne podle manualu to ma byt ENGINE=INNODB, mas? Jinak je p…
AZOR 26.02.2012 12:23
AZOR

nyní jsem udělal export tabulk

CREATE TABLE `sk_grou` (
  `id_grou` int(18) NOT NULL AUTO_INCREMENT,
  `name_grou` varchar(200) COLLATE utf8_czech_ci NOT NULL,
  `abbrev_grou` varchar(20) COLLATE utf8_czech_ci DEFAULT NULL,
  `description_grou` varchar(250) COLLATE utf8_czech_ci DEFAULT NULL,
  PRIMARY KEY (`id_grou`),
  UNIQUE KEY `abbrev_grou_U` (`abbrev_grou`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;


CREATE TABLE `sk_grgr` (
  `parent_grou_grgr` int(18) NOT NULL,
  `child_grou_grgr` int(18) NOT NULL,
  `transitive_grou_grgr` int(1) NOT NULL DEFAULT '0',
  KEY `SK_GRGR_FK1` (`child_grou_grgr`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

jaký je rozdíl mezi všema engine?

MyISAM, ktory cudzie kluce nepodporuje.

to bude ta chyba :)

Takže já budu muset asi využívat jen InnoDB

Tak jako Oracle db mi to samozrejme pobavilo nejen ze o vykonu Mysql a O jeho kvalitach si myslim sve, ale druhak = vzdyt ten engine nic neporuje, to by umel kazdy "rychle nic neumet" pokud neumi constrainty (check, fk) tak se je pokusi duplikovat applikacni logika a to bude jeste pomalejsi :D

Nevidim do toho, ale na prvni pohled nechapu jak je mozne Engine definovat pro jednotlive tabulky jako ma tu v klauzuli, kdyz je jeden transakcni a druhy neni - a radeji snad ani nechci slyset co kdyz spustim transakci na tabulkach kde je pulka v tom a v pulka v onom.

porovnavat mysql s oracle je trochu nefer. Ano engines v mysql su trochu zhovadilost, ale ma to svoj vyznam.
Myslim, ze aj poradna bezi na mysql a tipol by som si, ze MyISAM tabulky sa vyuzivaju v pripade, ze niekto vyuzije policko Hladat vpravo hore.

Co sa tyka tvojej otazky k transakcii, tak odpoved je jednoducha. Pokial nieco v transakcii zlyha, tak transakcia zaucinkuje len na innodb tabulky.

Nechtel jsem to srovnavat, spise mi to pobavilo. Chapu ze to ma svuj vyznam, ale nechapu proc je to na urovni tabulek, v oracle bych nasel taky nejake nalaogie = compatibile parametr, editce = ale vzdy na urovni cele DB a ma to sve duvody.

Co sa tyka tvojej otazky k transakcii, tak odpoved je jednoducha. Pokial nieco v transakcii zlyha, tak transakcia zaucinkuje len na innodb tabulky.

Toho jsem se presne bal tedy:

update ucet_inddo=ucet_indoo-10;

update ucet_tam_mysisam=ucet_tam_myissam+10;

insert into log_indoo values (prevedeno);

(a zde se mi to vymrdne)

commit;

Taky ucet_tam_mysisam ma na konte vic penez a ani stopa po tom, ze by neco bylo spatne...

Tvoj priklad ma spravnu dedukciu, ale takto by to asi nikto (znaly problematiky) neriesil. Pokial nieco nutne potrebujes dat do transakcie, tak automaticky InnoDB pripadne iny engine, ktory transakcie podporuje.
MyISAM bud na male databazy, alebo ako doplnok, ked chces vyuzit fulltext.

Nekdo znaly by to dal do InnoDB, ja tomu rozumim, jen si myslim ze kdyz nekdo alteruje tabulku ci re-creatuje, udela nějaky CTAS (create table as select, doufam ze mysql umi), prevede schema atd. Omylem dropne tabulku a pak ji vytvori z nejake zalohy atd. Tak tam bude "černá ovce" pod nějakým defalitním enginem, která se neprojeví měsíce, a roky a muže mít neskutečný následek - nebo opačně roky to tam bude pomrdávat.

Spis mi desi ze to lze mixovat nez to ze je tech enginu vic. V oracle si jde taky casto vynutit "uchylne chovani" viz asynchorni commit ale je to presne definovane a nespusti to nikdo, kdo to nema nastudovane, omylem to nastavit nelze,

by default je to trosku jeste uchylnejsi ;) ne vzdy je povazovat prazdny retezec za NULL, v 99% pripadu ano, pri indexovani asociativniho pole nikoliv (ale nesmi se to protahnout pres promennou, ktera by tomu dala realnej NULL)

ja mysql rozumim jako koza petrzeli, nicemne podle manualu to ma byt ENGINE=INNODB, mas?

Jinak je problem s fk nebo s timto typem checku, tzn zafunguje kdyz tam vlozis child bez parenta?

Zpět do poradny Odpovědět na původní otázku Nahoru