Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Usuwanie z bazy
Forum PHP.pl > Forum > Przedszkole
Poczatkujacy_Web
Co zrobic przy tworzeniu bazy tak aby po usunieciu danego elementu usowalo sie wszystko co z nim zwiazane?

przyklad:

baza: firmy
tabele: firmy, kategorie, powiazania

kasuje dana firme a ona znika z powiazan.

jak to zrobic?
cv65
Jeżeli w firmy, kategorie, powiazania masz ID firmy z tabeli firmy
To wykonaj zapytania DELETE FROM na wszystkie tabele pod tym ID
Poczatkujacy_Web
a jesli w kategoriach nie mam id_firmy?
darko
Wystarczy dodać on delete cascade na kluczu obcym, pod warunkiem, że istnieje w odpowiedniej tabeli.
cv65
to w jaki sposób ta tabela jest powiązana z poprzednimi ?
Poczatkujacy_Web
firmy:
id_firmy
nazwa
itd

kategorie
id_kategori
nazwa

powiazanie
id_powiazania
id_firmy
id_kategori

tak wyglada baza, a jak wygldaja relacje to chyba widac

Cytat(darko @ 26.08.2012, 19:42:27 ) *
Wystarczy dodać on delete cascade na kluczu obcym, pod warunkiem, że istnieje w odpowiedniej tabeli.



Podaj przykład jakiś jak możesz
cv65
Zrób select na powiazanie wyciągnij id_kategori i daj DELETE FROM na kategorie z tym wyciągnietym ID
darko
Przy tworzeniu tabel
Poczatkujacy_Web
taka skladnia jest ok?

  1. CREATE TABLE powiazanie (
  2. id_powiazania int (50) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  3. id_firmy int (50) FOREIGN KEY REFERENCES firmy(id_firmy) ON DELETE CASCADE,
  4. id_kategori int (50) FOREIGN KEY REFERENCES kategorie(id_kategori) ON DELETE CASCADE
  5. )
darko
Nie chodzi o stworzenie nowej tabeli, a o wykonanie takiego powiązania za pomocą kluczy obcych, aby w składni tworzącej tabele móc dodać klauzulę on delete cascade i zwyczajowo robi się to na samym początku, tj. tworząc strukturę bazy danych. Teraz, jeżeli posiadasz dwie tabele, z której przynajmniej jedna posiada klucz obcy, to możesz wykonać następujące czynności *):
(za X oznaczam docelową tabelę, na której pracujemy)
1)
  1. SHOW CREATE TABLE X
- pokaże Ci polecenie sql, które utworzyło tabelę
2) teraz zmodyfikuj polecenie usuwając klucz obcy:
  1. ALTER TABLE X DROP FOREIGN KEY <foreign KEY name>

3) teraz dodaj klucz z powrotem tym razem podając klauzulę on delete cascade:
  1. ALTER TABLE X ADD FOREIGN KEY(POLE_KLUCZA) REFERENCES REFERENCJA(POLE_REFERENCJI) ON DELETE cascade


voila
Literatura:
1)
2)

*) podane czynności wymagają posiadania klucza obcego w tabeli określonej jako X.
Poczatkujacy_Web
Mam dwie tabele teraz:

firmy:
id_firmy
nazwa
itd

kategorie:
id_kategori
nazwa

i teraz chce stworzyc 3cia ktora bedzie laczyc te dwie:

powiazanie:
id_powiazania
id_firmy
id_kategori

Chce to zrobic tym kodem:

  1. CREATE TABLE powiazanie (
  2. id_powiazania int (50) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  3. id_firmy int(50) NOT NULL,
  4. id_kategori int(50) NOT NULL,
  5. CONSTRAINT `powiazanie` FOREIGN KEY (`id_firmy`) REFERENCES
  6. `firmy` (`id_firmy`) ON DELETE CASCADE,
  7. CONSTRAINT `powiazanie` FOREIGN KEY (`id_kategori`) REFERENCES
  8. `kategorie` (`id_kategori`) ON DELETE CASCADE
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


Zerknijcie czy tak moze byc?
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.