Autor Zpráva
andy_99
Profil
ahojte. chcel by som vás poprosiť o vysvetlenie ako fungujú cudzie kľúče. Povedzme , že máme 2 tabuľky : uzivatelia a fotak.
tabuľka uzivatelia by mala stlpce: id (PK ,int, AI), meno(varchar), fotak_id(int).
tabuľka fotak by mala stĺpce: fotak_id(PK, int), meno_fotaku(varchar). Prosim vysvetlite mi ako spravit teda cudzi kluc fotak_id..
keď použijem takýto zápis:
ALTER TABLE fotak
 ADD CONSTRAINT fotak_id_fk
 FOREIGN KEY(fotak_id)
 REFERENCES uzivatelia(fotak_id);

a ked sa potom snažím do tabuľky fotak insertovať dáta vypíše mi nasledovnú hlášku...

Cannot add or update a child row: a foreign key constraint fails (`xxx`.`fotak`, CONSTRAINT `fotak_id_fk` FOREIGN KEY (`fotak_id`) REFERENCES `uzivatelia` (`fotak_id`))

SQL Statement:

INSERT INTO `xxx`.`fotak` (`fotak_id`, `meno_fotaku`) VALUES ('1', 'Nikon')

Ďakujem za každý komentár
Alphard
Profil
Píše to tu chybu, i když se nesnažíte vnutit vlastní hodnotu do fotak_id, resp. existuje v druhé tabulce hodnota do páru?

Hmm, Kajman má pravdu, že takhle to nemá smysl, chybí tam ta hodnota do páru, protože to děláte obráceně.
Kajman
Profil
andy_99:

Děláte klíč obráceně. Cizí klíč má být v tabulce uzivatelia a směřovat na fotak_id v tabulce fotak.

Tedy ALTER TABLE uzivatelia
andy_99
Profil
presne tak.. píše to vždyteda aj keď sa snažím vložiťhoc ake nove data do phpmyadmina alebo do mysql workbench.... teda bud môžem najprv vymazať všetky data a potom spraviť tento cudzi kľúč a to mi už nedovolí ale vložiť už žiadne data do tabuľky fotak ... alebo najprv vložím všetky data do tabuľky fotak ale to mi zasa nedovolí spraviť cudzí klúč.


čiže to má vyzerať následovne?
ALTER TABLE uzivatelia
 ADD CONSTRAINT fotak_id_fk
 FOREIGN KEY(fotak_id)
 REFERENCES fotak(fotak_id);



Pri tomto pokuse som mal takúto odozvu:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`xxx`.<result 2 when explaining filename '#sql-3554_ce'>, CONSTRAINT `fotak_id_fk` FOREIGN KEY (`fotak_id`) REFERENCES `fotak` (`fotak_id`))
Kajman
Profil
andy_99:

Máte v tabulce uzivatelia ve sloupci fotak_id nějaké nenullové hodnoty, které nejsou v tabulce fotak?

select u.fotak_id from uzivatelia u where u.fotak_id not in (select f.fotak_id from fotak f)

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: