DELETE from 2 tables
Mijn excuses dat ik ALWEER hulp moet vragen.
Zit weer met het volgende probleem.
Probeer in 1 query gegevens uit 2 tabellen te deleten.
dit was me gelukt, Alleen als tabel 2 geen gegevens bevatte dan wou het delete van tabel 1 niet.
Het volgende ziet er zo uit: (voorbeeld)
Tabel - 1
ID - Primary Key
Rest informatie is niet van belang.
Tabel 2
ID - Primary Key
Tabel 1 ID
Zoals je ziet sla ik het ID van tabel 1 op in tabel 2.
Nu zou ik graag hulp willen hebben hoe ik deze query goed kan krijgen zodat vanuit alle 2 de tabellen het wordt gedelete. Ook al zit er in tabel 2 geen informatie, Dan nog moet hij hem uit tabel 1 deleten.
Hopelijk heb ik het kunnen uitleggen en kan iemand mij hiermee helpen. (Ben zooooo slecht in query's opbouwen.)
Met vriendelijke groet,
ark
Verkeerd idee!
En je kan het eventueel oplossen met een ON DELETE CASCADE
Dus ik kan het beste het in 2 query's doen?
Wat Noppes (hopelijk) bedoeld is, dat je dit gedrag in je datamodel moet vastleggen (door middel van Foreign Keys).
Meer hier.
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
Dit voorbeeld staat daar.
Dus als je een delete query uitvoert via de tabel child and je delete parent_id dan wordt automatisch ook de tabel parent gedelete met het opgegeven id?
Maar wat nou als je nou uit de tabel parent een delete uitvoert, Hoe weet hij dan wat hij uit de andere tabellen moet verwijderen?
En wat nou als je uit meer tabellen moet verwijderen?
Voorbeeld:
Gebruiker 1
Heeft info in news staan, Heeft info in nog iets anders staan, En heeft info in weer iets anders staan.
Als je dan gebruiker 1 delete hoe moet mysql dan weten hoe die die andere gegevens moet deleten?
/* Edit */
Is dit de veiligste manier? Of maakt het niet zoveel uit als er records achterblijven in een database? Word je database op den duur toch vol van?
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
Werkt 2 query's echt niet?
2 query's zal wel lukken.
Vroeg me gewoon af of het mogelijk was om het in 1 query te doen.
Opzich wil het wel met USING, Alleen als dan tabel 2 geen waarde bevat, dan delete hij het deel van tabel 1 ook niet.
ark schreef op 24.04.2009 22:35:
Dit voorbeeld staat daar.
Dus als je een delete query uitvoert via de tabel child and je delete parent_id dan wordt automatisch ook de tabel parent gedelete met het opgegeven id?
Dus als je een delete query uitvoert via de tabel child and je delete parent_id dan wordt automatisch ook de tabel parent gedelete met het opgegeven id?
Nee, precies andersom. Als je de parent verwijdert, worden alle children verwijdert. Je hebt niks aan een child zonde bestaande parent (denk bv aan submenu's)
ark schreef op 24.04.2009 22:35:
Door die foreign keys, er is een koppeling met die tabel.Maar wat nou als je nou uit de tabel parent een delete uitvoert, Hoe weet hij dan wat hij uit de andere tabellen moet verwijderen?
ark schreef op 24.04.2009 22:35:
Hoezo uit meer tabellen? Als jij in meerdere tabellen een foreign key maakt naar diezelfde parent, worden, als je die parent verwijdert, alle records uit alle tabellen,die ernaar verwijzen, verwijdert.En wat nou als je uit meer tabellen moet verwijderen?
ark schreef op 24.04.2009 22:35:
Voorbeeld:
Gebruiker 1
Heeft info in news staan, Heeft info in nog iets anders staan, En heeft info in weer iets anders staan.
Als je dan gebruiker 1 delete hoe moet mysql dan weten hoe die die andere gegevens moet deleten?
Gebruiker 1
Heeft info in news staan, Heeft info in nog iets anders staan, En heeft info in weer iets anders staan.
Als je dan gebruiker 1 delete hoe moet mysql dan weten hoe die die andere gegevens moet deleten?
Daar moet je niet over nadenken :P Dat weet hij gewoon. MySQL slaat gewoon ergens op welke relaties er zijn.
ark schreef op 24.04.2009 22:35:
Een database krijg jij niet zomaar vol. Als jij elke dag 10.000 records toevoegd, en dat 50 jaar doet, heb je 180 miljoen records. Dan is je database nog steeds niet vol. Ook al moet je dan wel wat meer moeite doen om je database snel te houden (zoals INDEXes, FOREIGN KEYS, etc)/* Edit */
Is dit de veiligste manier? Of maakt het niet zoveel uit als er records achterblijven in een database? Word je database op den duur toch vol van?
Is dit de veiligste manier? Of maakt het niet zoveel uit als er records achterblijven in een database? Word je database op den duur toch vol van?
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Bedankt voor je reactie.
Ik moet me echt eens meer gaan verdiepen in het goed creeren van een database.
Heb nog even een vraagje.
Wat zou ongeveer het max aantal Query's zijn voor een uitgebreide website?
Dan bedoel ik daarmee:
- Nieuws Systeem + Comment systeem
- Admin Systeem
- User Systeem (Met change password etc...)
- Nog wat andere dingen
Je moet het bijvoorbeeld zo zien: Als je informatie uit meerdere tabellen nodig hebt, maar die relatie is 1 op 1 (bijvoorbeeld een gebruiker bij een nieuwsbericht) is in 1 query al die informatie op te halen. Als je meerdere resultaten bij 1 ding wilt vinden, zoals alle tags bij een nieuwsbericht, worden het al snel 2 queries. Probeer wel te vermijden dat je queries in een loop (while, foreach etc) gaat uitvoeren. 9 van de 10 keer is dat niet nodig en onverstandig. Aangezien een database informatie veel sneller ophaalt dan bijvoorbeeld PHP, is het vaak sneller om iets in 2 queries te doen, waarbij je in de 2e query veel meer informatie ophaalt dan nodig, dan dat je die 2e query in een loop zet en dus in theorie 100en queries kan uitvoeren.
Dus ik hoef me nog niet zorgen te maken om mijn 50 Query's?
50 is opzich al vrij veel, zeker omdat voor een nieuws en comment systeem + users check toch geen 10 queries nodig zijn lijkt me?