Avatar billede fragel Nybegynder
16. maj 2002 - 01:30 Der er 11 kommentarer og
1 løsning

Erstatning for: on delete cascase

Har har en række tabeller, der hænder sammen via en-til-mange relationer - altså en hirarkisk opbygning. Dermed er der altså én tabel, som ligger øverst. Hvis jeg ønsker at slette en række i dennne tabel, så skal alt "under den" også fjernes, dvs. alle relationer der er knyttet via den fremmednøgle og alle deres relationer osv...

Havde jeg kunnet bruge table-typen InnoDB, kunne jeg have brugt noget ala:
FOREIGN KEY x
REFERENCES y(x)
ON DELETE CASCADE.

Nogle forslag til hvordan jeg skal gøre det nu?

ps: bruger mySQL version 3.23

/Jeppe
Avatar billede a1a1 Novice
16. maj 2002 - 01:53 #1
asp eller php....:) ??

jeg tror ikke at man kan det "automatisk" i mySQL....:(
Avatar billede fragel Nybegynder
16. maj 2002 - 01:54 #2
asp
Avatar billede a1a1 Novice
16. maj 2002 - 01:55 #3
men der hvor du delet'er må du jo lave to kald

delete from childtable where fk_id = tal
delete from table where id = tal

:)
Avatar billede fragel Nybegynder
16. maj 2002 - 01:58 #4
tja, men nu har jeg 8 tabeller. Så skal jeg jo til at lave en masse selects for at finde fk_id.

Temmeligt besværligt... :(
Avatar billede a1a1 Novice
16. maj 2002 - 02:01 #5
det er desvære nok den eneste måde....

....hvordan ser dit database design mon ud????

du må da have den samme nøgle (ID) i flere tabeler :)
Avatar billede fragel Nybegynder
16. maj 2002 - 02:04 #6
Mener, at dette er de nyeste:
http://www.but.auc.dk/~jhv38731/sql.txt

"hoved-tabellen" er gennemlob. Når en række slettes heri skal alle de andre tabeller påvirkes.
Avatar billede a1a1 Novice
16. maj 2002 - 02:12 #7
:)
det er ikke lige til
Avatar billede fragel Nybegynder
16. maj 2002 - 02:14 #8
hehe, nej ... det var desværre også min konklusion :(
Avatar billede a1a1 Novice
16. maj 2002 - 02:20 #9
find bane_id
bane_id = "SELECT bane_id FROM vejbane WHERE gennemlob_id = " & ditID

find bil_id
bid_id = "SELECT bil_id FROM bil WHERE bane_ID = " & bane_id

SLET_
strSQLdelete = "DELETE FROM ko_groen WHERE ID = " & bane_id
strSQLdelete = "DELETE FROM ko_roed WHERE ID = " & bane_id
strSQLdelete = "DELETE FROM bil_tid WHERE ID = " & bil_id
strSQLdelete = "DELETE FROM bild WHERE ID = " & bane_id

hvis der er oprettet flere poster skal du loope lidt igennem jo...:(
Avatar billede a1a1 Novice
16. maj 2002 - 02:22 #10
hov..
strSQLdelete = "DELETE FROM ko_groen WHERE bane_id = " & bane_id
strSQLdelete = "DELETE FROM ko_roed WHERE bane_id = " & bane_id
strSQLdelete = "DELETE FROM bil_tid WHERE bil_id = " & bil_id
strSQLdelete = "DELETE FROM bil WHERE bane_id = " & bane_id
Avatar billede fragel Nybegynder
16. maj 2002 - 07:53 #11
tja... "problemet" er bare, at der sagtens kan eksistere flere tusinde rækker i bil-tabellerne. Dette giver jo vildt mange sql-forespørgsler/kommandoer.
Avatar billede a1a1 Novice
20. maj 2002 - 14:41 #12
ja...:(

men det er desværre hvad du kan gøre.....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester