Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zwiazek klucz obcy - klucz podstawowy nie działa
nieraczek
post 26.10.2008, 08:53:52
Post #1





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


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ł.

Ten post edytował nieraczek 26.10.2008, 08:54:44
Go to the top of the page
+Quote Post
bigZbig
post 26.10.2008, 10:12:18
Post #2





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
fisz
post 2.01.2009, 23:03:55
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 2.01.2009

Ostrzeżenie: (0%)
-----


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 ...

Ten post edytował fisz 2.01.2009, 23:05:48
Go to the top of the page
+Quote Post
sticker
post 3.01.2009, 00:34:38
Post #4





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
fisz
post 3.01.2009, 13:17:41
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 2.01.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 08:44