Foreign Keys (klucze obce) to bardzo przydatna funkcjonalność w MySQL (silnik InnoDB). Umożliwiają zachowanie integralności danych i porządku w bazie (dzięki zdarzeniom ON DELETE i ON UPDATE).

Ostatnio straciÅ‚em prawie godzinÄ™ – lub nawet nieco ponad – gdyż za nic w Å›wiecie nie chciaÅ‚ mi siÄ™ zaÅ‚ożyć klucz obcy. Co ciekawe tabela byÅ‚a tabelÄ… łączÄ…cÄ… dwie inne (relacja 1:n – jeden news : kilka tagów), bÄ™dÄ…ca kopiÄ… innej – z subtelnÄ… zmianÄ… (inna nazwa jednego pola).

Okazało się, że nazwy kluczy obcych muszą być unikalne w skali całej bazy danych, o czym niestety nie wiedziałem:

If the CONSTRAINT symbol clause is given, the symbol value must be unique in the database. If the clause is not given, InnoDB creates the name automatically.

Cóż – niewiedza kosztuje, a czas to pieniÄ…dz. Mam nadziejÄ™, że wpis komuÅ› siÄ™ przysÅ‚uży ;)