Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zwiazek klucz obcy - klucz podstawowy nie działa
Forum PHP.pl > Forum > Bazy danych > MySQL
nieraczek
Czy klucze obce i związki między tabelami w mysql w ogóle działają ?

Utworzylem klucz obcy wedlug wzoru wykonujac zapytanie w phpmyadminie (bo u mnie nie ma nigdzie widoku relacyjnego zeby to zrobic recznie):
ALTER TABLE c ADD CONSTRAINT nazwa_ograniczenia FOREIGN KEY (d) REFERENCES b(a);

c - tabela w ktorej ma byc klucz obcy
d - rekord tabeli b. kluczem obcym
b - tabela z kluczem glownym
a - klucz glowny do ktorego laczy klucz obcy


Obie tabele ustawiłem na InnoDB.

W phpmyadminie w jednej tabeli dodalem wiersz wpisujac w kolumnie, ktora jest kluczem obcym ID, ktore nie wystepuje w drugiej tabeli w kolumnie bedacej kluczem podstawowym i wiersz zostal dodany exclamation.gif A przeciez nie powinien, dlaczego wiec zostal dodany ?

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Już chyba mam przyczynę: najpierw należy zmienić typ tabel a potem zrobić związek między nimi. Ja najpierw zrobiłem związek a potem zmieniłem typ tabel i dlatego związek nie działał.
bigZbig
Relacje w mysql działają pod warunkiem, że:
- używasz MySQL min. w wersji 5.
- tabele są typu InnoDB
- kolumny kluczy podstawowych i powiązanych z nimi kluczy obcych są tego samego typu
fisz
podłączam się do pytania:

Stworzyłam bazę za pomocą phpMyAdmin.
Mam (m.in) takie tabele:

nauczyciel(id_nauczyciela, ... , nazwa_przedmiotu, id_przedmiotu)
przedmiot(id_przedmiotu, nazwa_przedmiotu)

Utworzyłam w tabeli nauczyciel klucze obce do id_przedmiotu i nazwy_przedmiotu. Jednak kiedy w tabeli przedmiot zmieniam wartość id_przedmiotu to nie zmienia się ona w tabeli nauczyciel :/ Myślałam, że ten klucz obcy tak właśnie działa, ale coś mi nie gra tylko nie wiem co :/ Czy to błąd w myśleniu? Może w tabeli nauczyciel nic nie ma prawa się zmieniać? (w/w warunki spełnione) Czy to może chodzi o to, że klucz obcy może być tylko do klucza podstawowego utworzony?

edit: mam ustawione opcje update cascade ...
sticker
baza sprawdza spojnosc danych w trybie transakcyjnym jezeli masz 2 tabele np. ludzie (1 - jas 2 - malgosia) i zwierzeta (1- kot - 1(id osoby), 2.-pies -1) to jeżeli zmienisz właściciela kota z 1 na 2 to i tak baza jest w stanie spojnym. Rekordy wiązane sa na podstawie realacji czy istnieje a nie na zasadzie logicznej bo o logice aplikacji decyduje twórca warstwy biznesowej
fisz
dzięki za odpowiedź, sama sobie już w sumie odpowiedziałam:
problemem było to, że wcześniej bazy stworzyłam w krasnalu, teraz przerzuciłam się na WAMPa i bazę tylko skopiowałam. Nie wiem czy to jest przyczyną, ale jak stworzyłam bazę od początku to już wszystko ładnie się razem zmieniało...(wcześniej po skopiowaniu nie miałam pliku .opt) Może to jest przyczyna, a może mając świeższy umysł coś zrobiłam inaczej smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.