Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: usuwanie kaskadowe
Forum PHP.pl > Forum > Bazy danych > MySQL
koskitos
Chodzi mi o to, ze mam kilka tabel polaczonych ze soba polem pole_id.

Mam jakis warunek i on zwraca liste id (pole_id), ktore nalezy usunac z wszystkich tabel.

Czy inaczej mowiac chce usunac dane z kilku tabel o danym id spelniaujacych konkretny warunek.

To sie jakos nazywalo: kaskadowe usuawanie, czy jakos tak....

jak to sie robi? jakie wersje mysql to obsluguja?
bendi
CREATE TABLE -> type InnoDB
a później

FOREIGN KEY -> ondelete cascade
koskitos
ze jak?

daj mi przyklad zapytania jak to sie usuwa...
SongoQ
Cytat
daj mi przyklad zapytania jak to sie usuwa...


Zapytanie wyglada normalnie
  1. DELETE FROM TABLE


Najwazniejsze w usuwaniu caskadowym jest typ relacji no i w przypadku mysqla typ tabel. Ale o tym @bendi pisal.
koskitos
hehe, ej czlowieku ty mi dales zapytanie usun z jednej tabeli

ja chce usunac z wielu tabeli

czyli to niby ma tak wygladac?
  1. DELETE FROM TABLE, table2


o co wam chodzi z tym typem relacji no?
jakby co mam zwykla tabele...

piszcie po ludzku
Jarod
Cytat(koskitos @ 15.06.2006, 21:16 ) *
hehe, ej czlowieku ty mi dales zapytanie usun z jednej tabeli

ja chce usunac z wielu tabeli

czyli to niby ma tak wygladac?
  1. DELETE FROM TABLE, table2


o co wam chodzi z tym typem relacji no?
jakby co mam zwykla tabele...

piszcie po ludzku


Człowieku poszukaj. SongoQ już kiedyś o tym pisał.
Kinool
na forum wielu leniwych smile.gif

ale do rzeczy smile.gif jak juz zostalo napisane musisz uzyc kluczy obcych polecam wiki albo google jesli nie wiesz czym one sa

dzieki nim pozesz powizac ze soba kilka tabel i uzuwajac rekord w tabeli "glownej" w tabelach gdzie sa ustawione klucze obce "polaczone" z tabele "glowna" polecenia kasowania lub edycji sa wykonywane automatycznie
koskitos
spoko, dzieki, chociaz Ty umiesz wytlumaczyc

ale mam pytanie: czy to usuwanie kaskadowe jest obslugiwane przez wszystkie wersje mysql, czy tylko 5?

bo widze, ze aby zaprojektowac baze z tym kluczem obcym to sie jakos inaczej projektuje?

bo w manualu znalazlem ze wystarczy dodac: FOREIGN KEY (reviewingid) REFERENCES reviewing (reviewingid) on delete cascade
a nie pisze zeby tabela byla innodb?

wogole czym sie rozni innodb od myisam?
jak normalnie dodaje tabele to dodaje innodb czy myisam?


OT:
ale ja nie jestem leniwy, bo tego szukalem, a o kluczu obcym nikt z poprzednikow nie pisal,
jak ktos nie wie, to go naprowadzcie, a nie rzucacie jakimis haslami
suchy1
Witam

mam podobny problem, chcialbym aby zapytanie zmienialo status w drugiej tabeli a dokladnie chodzi mi o takie cos:

  1. CREATE TABLE Pokoj
  2. (
  3. id_pokoju int(7) PRIMARY KEY AUTO_INCREMENT,
  4. STATUS ENUM("wolny", "zajety") DEFAULT "wolny" NOT NULL
  5. )Type=InnoDB;


Druga tabela

  1. CREATE TABLE wynajmowanie
  2. (
  3. id_wynajecia int(7) PRIMARY KEY AUTO_INCREMENT,
  4. id_klienta int(7) NOT NULL,
  5. id_pokoju int(7) NOT NULL,
  6. data_wynajecia numeric(6) NOT NULL,
  7. data_zwrotu numeric(6) NOT NULL,
  8. FOREIGN KEY(id_pokoju) REFERENCES pokoj(STATUS) UPDATE STATUS="wolny"
  9. )Type=InnoDB;


w momencie usuniecia jakiegos id_wynajecia chcialbym zmienic status w pokoju z "zajety" na "wolny" da sie takie cos zrobic ?

Z gory dzieki za odpowiedz smile.gif
SongoQ
@koskitos Piszesz pytanie i zadasz aby Ci kazdy krok po kroku to zrobil. Dostales 2 wskazówki co masz zrobic i nawet nie raczyles pogooglowac.

Cytat
ale mam pytanie: czy to usuwanie kaskadowe jest obslugiwane przez wszystkie wersje mysql, czy tylko 5?

Tam gdzie jest Inno DB z tego co pamietam to chyba bylo 4.0 albo jeszcze wczesniej tylko to bylo domyslnie wylonczone.

Cytat
wogole czym sie rozni innodb od myisam?

Inno DB ma wewneczne polaczenie (relacje) ale za to jest wolniejszy

Cytat
ale ja nie jestem leniwy, bo tego szukalem, a o kluczu obcym nikt z poprzednikow nie pisal,

A co pisal bendi w 2 poscie? Czy tak trudno wpisac te 3 slowa kluczowe w google?

Cytat
CREATE TABLE -> type InnoDB
a później
FOREIGN KEY -> ondelete cascade


Cytat
jak ktos nie wie, to go naprowadzcie, a nie rzucacie jakimis haslami

Wydawalo mi się ze to jest to samo.
koskitos
(...)

a to innodb jest duzo wolniejsze od myisam?questionmark.gif

chodzi mi o to, że czy jest sens robić tabele innodb, czy lepiej pozostawic
myisam??

bo w sumie mogę to trochę inaczej zrobić, ale oczywiscie z kaskadowym byloby lepiej
Jarod
Cytat(koskitos @ 17.06.2006, 13:21 ) *
(...)

a to innodb jest duzo wolniejsze od myisam?questionmark.gif

Pewnie przy większej ilości zapytań zauważysz różnice. Nie wiem - niech się wypowiedzą inni.

Cytat(koskitos @ 17.06.2006, 13:21 ) *
chodzi mi o to, że czy jest sens robić tabele innodb, czy lepiej pozostawic
myisam??

bo w sumie mogę to trochę inaczej zrobić, ale oczywiscie z kaskadowym byloby lepiej


To od Ciebie zależy. MyIsam nie obsługuje transakcji. Ja zrezygnowałem z cascade - aplikacja sama tego pilnuje. Natomiast transakcje się przydają.

Nie wszystkie tabele muszą być innodb. częśc może być myisam - jak Ci wygodniej.
SongoQ
Przede wszystkim narzut czasowy jest przy operacjach modyfikowania stanu bazy. Co lepsze wedlug mnie InnoDB przynajmniej prawie zawsze z tego korzystam bo jest obsluga transakcij. Jesli operujesz tylko na jednej tabeli to wsumie da sie obejsc ale jesli masz np 2 tabele i musisz wymusic powiazanie to sie az prosi InnoDB.

Testuj testuj i sam sie przekonasz co jest lepsze.
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.