Autor | Zpráva | ||
---|---|---|---|
JaySee Profil |
#1 · Zasláno: 13. 7. 2012, 14:04:59
Chyba v dotazu: Cannot add or update a child row: a foreign key constraint fails (`lapia`.`menu`, CONSTRAINT `menu_ibfk_4` FOREIGN KEY (`id`) REFERENCES `vazby` (`menu_id`) ON DELETE CASCADE ON UPDATE NO ACTION)
Jenže mě tuhle chybu hlásí při insertu na tabulku menu. Mazání, tam vše šlape, ale proč to nejde u insertu? Jediné co chci je do té tabulky vložit záznam, bez nějakých dalších návazností. Cizí klíče potřebuji jen pro mazání. Víte někdo, co s tím? |
||
Kajman Profil |
#2 · Zasláno: 13. 7. 2012, 15:18:49
Nemáte tam ten cizí klíč menu_ibfk_4 tedy jen chybně z nějakých dřívějších pokusů? Takto to vypadá, že vkládáte id, které neexistuje ve sloupci menu_id v tabulce vazby. Ale cizí klíče se většinou dělají opačným směrem.
|
||
JaySee Profil |
#3 · Zasláno: 13. 7. 2012, 15:40:44
Kajman:
No, než jsem přidal cizí klíč pro mazání návazných řádků v cizích tabulkách, tak to šlo. Ted jsem přidal klíč na tabulku menu, která obsahuje spoustu vazeb v tabulce vazby. Jelikož mi to stále nefunguje, uchýlil jsem se k bastlířskému řešení a to tak, že ty návazné záznamy mažu vlastním mysql_query(DELETE...);
Ale doptám se, co jste myslel tím, že se cizí klíče běžně opačným směrem? |
||
Kajman Profil |
#4 · Zasláno: 13. 7. 2012, 16:00:08
JaySee:
„co jste myslel tím, že se cizí klíče běžně opačným směrem?“ To, že jednosloupcový primární klíč většinou není zároveň cizím klíčem na pomocný sloupeček v jiné tabulce. Spíše bych očekával v jiných tabulkách, kde se zadává menu_id, tak tam bude cizí klíč do tabulky menu na sloupec id. |
||
JaySee Profil |
#5 · Zasláno: 13. 7. 2012, 16:27:58
Kajman:
No dodnes to chápu takto: Tabulka A má cizí klíč na B. Změním tabulce A id (primary index) a tabulce B se změní extrenal_ID. Takže přiřazuji tabulce A klíč cílený na B. Ale z Vašeho vyjádření to cítím opačně, že z tabulky B cílím na A. Ale jak pak může tabulka B vědět, že v A nastala změna? |
||
Kajman Profil |
#6 · Zasláno: 13. 7. 2012, 20:17:24
Pokud máte v tabulce B cizí klíč směřující na primární klíč na tabulce A, tak tento cizí klíč hlavně hlídá to, že to tabulky B nemůžete dát do onoho sloupce hodnotu, která se nenachází v tabulce A.
|
||
Časová prodleva: 11 let
|
0