Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kasowanie powiązanego wiersza
php programmer
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


Witam, mam taki problem,

otóż jest tabela,z której chcę skasować w PgAdminie (nie mylić z phpPgAdminem),
pewną ilość wierwszy, jednak nie mogętego zrobić, ponieważ te id tych wierszy,
stanowi klucz obcy (referencję), w innej tabeli.

Tak więc moj problem polega na napisaniu triggera
i prawdopodobnie powiązanej do niego procedury

Czyli coś takiego:
  1. CREATE TRIGGER tr_delete_cascade
  2. BEFORE DELETE ON tabela_gdzie_kasuje
  3. i tutaj już pseudokod
  4. SKASUJ NAJPIERW WIERSZ
  5. z tej innej tabeli, która zawiera klucz obcy odnoszący się do
  6. tabela_gdzie_kasuje


to będzie mójpierwszy TRIGGER więc proszę o wyrozumiałośc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  1. .... order_id integer REFERENCES orders ON DELETE CASCADE,


Zdefiniuj tabele w ten sposob i powiazane wiersze same sie pokasuja.
Go to the top of the page
+Quote Post
php programmer
post
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


ale to chyba nie tak,
może się mylę, ale kasowanie kaskadowe
powoduje chyba kasowanie w dół,
a w moim przypadku cchodzi o kasowanie w górę
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Zgadza sie, ale zobacz co napisales:

Cytat
otóż jest tabela,z której chcę skasować w PgAdminie [...], pewną ilość wierwszy, jednak nie mogę tego zrobić, ponieważ te id tych wierszy, stanowi klucz obcy [...] w innej tabeli.


Czyli chodzi ci o kasowanie "w dol", czyli usunac rodzica i dzieci ktore sie do niego odwoluja (rodzic_id to bedzie FK).

Bo w drugastrone to nie mialbys problemow z usuwaniem -- pozwoliloby ci usunac te wiersze.
Go to the top of the page
+Quote Post
php programmer
post
Post #5





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


Acha OK, jednak mimo wszystko wolał bym użyć TRIGGERA,
ponieważ wolałbym uniknąc zmiany samej deklaracji tabeli,

Ten post edytował php programmer 28.09.2006, 10:26:25
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


No to cos w tym stylu, pomijam juz definicje triggera tylko pisze jego cialo

  1. DELETE FROM tabela_rodzica WHERE id = OLD.id jako klucz obcy do tabeli;


Takie rozwiaznie ma wielki minus tabela rodzica nie moze miec dzieci, bo wtedy bedziesz mial blad. Mozesz ewentualnie przed delete dac selecta ktory zwroci czy ma dzieci i wtedy wyrzucic blad lub zwrocic blad z usuniecia. Ale tak czy inaczej w ten sposob sie da zrobic.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 01:34