Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ON DELETE CASCADE
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
chiken
Witam
szukam informacji na temat ON DELETE CASCADE, i nie moge znalesc :/

potrzebuje usunac rekord z tabeli A , oraz wszystkie inne rekordy powiazane z nim w innych tabelach, znajduje tylko cascadowe usuwanie tabel , ale nie o to mi chodzi
Adiasz
rozwiazanie 1:
do wszystkich tabeli, z ktorych chcesz aby automatycznie byly kasowane rekordy dodajesz klucz obcy
  1. ALTER TABLE table_XXX ADD CONSTRAINT nazwa FOREIGN KEY (nazwa_pola_w_XXX) REFERENCES tabela_A(nazwa_pola_w_A) MATCH FULL ON UPDATE CASCADE DELEFE CASCADE;

i kasowanie bedzie nastepowalo automatycznie (postgres sie tym zajmie)
(zwroc uwage ze aby to zadzialalo pole nazwa_pola_w_A musi byc UNIQUE aby to ustawic jezeli nie jest nalezy:
  1. ALTER TABLE tabela_A ADD constraint testowy1 UNIQUE(nazwa_pola_w_A)
)

rozwiazanie 2:
jezeli z jakichs powodow nie mozna ustawic kluczy pozostaje napisac funkcje kasujaca samemu i ustawic triggera
* piszemy funkcje, ktora sprawdzi czy w zbiorze tabel {x1..xn} wystepuje wartosc OLD.nazwa_elementu_laczacego i jezeli tak to wykonywany jest DELETE z warunkiem na te element
* tworzymy triggera
  1. CREATE TRIGGER tr_delete_cascade
  2. AFTER DELETE ON tabela_A
  3. FOR EACH ROW EXECUTE PROCEDURE delete_cascade();
chiken
hej
dzieki za odpowiedzi,
myslalem ze jakos sie wywoluje on delete cascade, nie sadzilem ze w tabeli sie umieszcza to.

Kiedy sie zorientowalem wszystko poszlo tak jak trzeba, znajomego sie pytalem i mnie zmylil poprostu i jak czytalem to sie pogubilem,

dzieki za pomoc
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.