web.php5.sk

Problémy s cudzími kľúčmi v MySQL

4. október 2015 / Čamo

Nebudem zdržiavať a prejdem rovno k veci. Tento článok nebude o vytváraní cudzích kľúčov všeobecne, ale zameria sa na problémy, s ktorými sa pri ich vytváraní v MySQL určite stretnete.

Príkaz na vytvorenie cudzieho kľúča v Mysql vyzerá cca. takto:

ALTER TABLE `t2` 
ADD CONSTRAINT `t2_t1_id_fk`
FOREIGN KEY (`t1_id`)
REFERENCES `test`.`t1`(`id`)
ON DELETE SET NULL
ON UPDATE CASCADE;

Stručne: V tabluľke t2 sme vytvorili cudzí kľúč s názvom t2_t1_id_fk, ktorý ukazuje na stĺpec id v tabuľke t1 v databáze test. Pri zmazaní záznamu v tabuľke t1 sa v tabuľke t2 nastaví NULL a pri update stĺpca id v tabuľke t1 sa v t2 automaticky zmení hodnota na novú hodnotu t1.id.

To čo chcem ale v tomto článku rozobrať sú chyby, ktoré sa pri vytváraní cudzích kľúčov v MySQL vyskytujú. Takže pri vytváraní cudzieho kľúča si treba dať pozor na tieto veci:

  1. Dátový typ obydvoch stĺpcov musí byť rovnaký a v rovnakom rozsahu. Čiže INT(10) a INT(11) vám neprejde. Obidva stĺpce musia byť napr. INT(11).
  2. To isté platí o direktíve unsigned. Buď ju musia mať nastavenú obidva stĺpce, alebo ani jeden.
  3. Stĺpec z ktorého chcete urobiť cudzí kľúč (v príklade t2.t1_id) musí byť indexovaný. Jednoducho na ňom treba pred tým založiť obyčajný, alebo iný index.
  4. Ak rodičovský stĺpec môže obsahovať hodnotu NULL, musí byť NULLable aj stĺpec s cudzím kľúčom.
  5. Ak nastavujete akciu ON DELETE SET NULL, logicky musí mať stĺpec s cudzím kľúčom povolené NULLové hodnoty.

To je všetko a pritom presne to čo som chcel. Dovidenia dobrú noc!

Ak chcete pridávať komentáre musíte sa prihlásiť