Autor Zpráva
JaySee
Profil
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
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0