Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie rekordów połączonych relacjami
Forum PHP.pl > Forum > Bazy danych > MySQL
rav1989
Witam

Zacznę może od przykładu:
Mam tabelki user (id_user, name, login, haslo, ...), gallery (id_picture, id_user ,url, nazwa, opis, ...), tagmap (id_picture, id_tag) , tags (id_tag, nazwa)

Każdy user może mieć n obrazów w galerii i każdy obraz może mieć n tagów, przy czym tagi są trzymane odzienie i połączone z obrazem w oddzielnej tabeli tagmap

Teraz pytania
Jak powiedzieć bazie danych aby usunęła z automatu:
1) Wszystkie zdjęcia oraz tagi tych zdjęć (bez usuwania ich z tabeli tag) podczas usuwania usera
2) Wszystkie odwołania w tagmap podczas usuwania taga z tags
3) Wszystkie odwołania w tagmap podczas usuwania obrazka z galerii i nie usunęła przez przypadek użytkownika ani tagu z tags

Wiem, że można ustawić On Delete i On Update, prawdopodobnie zależy to też od kierunku relacji i od jej rodzaju...

Mógłby mi to ktoś łopatologicznie wytłumaczyć jak to połączyć tak aby baza nie krzyczała i nie sypała błędami, że nie można czegoś usunąć... oraz, żeby nie zostawały śmieci...

Pozdrawiam
Rav
Noidea
Ustawiasz ON DELETE CASCADE dla kluczy obcych: gallery.id_user, tagmap.id_picture, tagmap.id_tag. Tabele muszą być typu InnoDB

Przykład http://dev.mysql.com/doc/refman/5.5/en/inn...s.html#id857683
rav1989
Cytat(Noidea @ 13.08.2011, 07:24:32 ) *
Ustawiasz ON DELETE CASCADE dla kluczy obcych: gallery.id_user, tagmap.id_picture, tagmap.id_tag. Tabele muszą być typu InnoDB

Przykład http://dev.mysql.com/doc/refman/5.5/en/inn...s.html#id857683


Aha smile.gif Dziękuję, za pomoc biggrin.gif

Jeszcze przy okazji zapytam do czego w takim razie jest ON UPDATE questionmark.gif i jakiś przykład zastosowania w praktyce??
melkorm
ON UPDATE - do aktualizacji gdy relacja to coś innego niż ID - np. login - chociaż w większości przypadków lepiej zrobić JOIN'a.
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.