DBMS?
I nyare versioner av MySQL kan du testa:
delete p
, b
, c
from tbl_project p
, tbl_business b
, tbl_comment c
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.projectid
17 svar · 411 visningar · startad av Melea
Tjenixen!
Har fastnat... jag har tre tabeller som jobbar mellan varandra typ, såhär:
tbl_project - id
tbl_business - projectid (relation till tbl_project id)
tbl_comment - businessid (relation till tbl_business id)
Hur kan jag skriva en fråga som tar bort från alla dessa tabeller med ett id (tbl_project id)?
Tack på förhand!
DBMS?
I nyare versioner av MySQL kan du testa:
delete p
, b
, c
from tbl_project p
, tbl_business b
, tbl_comment c
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.projectid
Vad händer om du skippar alias?
delete tbl_project p
, tbl_business b
, tbl_comment c
from tbl_project
, tbl_business
, tbl_comment
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.id
Då får jag upp
Table 'project.tbl_project' doesn't exist
/r
Hold your horses, det står fel, vänta lite.
/r #2
Det funkar!
Hur kommer det sig att prefixerna inte går att använda här?
/r #3
Detta funkar
delete tbl_project p
, tbl_business b
, tbl_comment c
from tbl_project p
, tbl_business b
, tbl_comment c
where p.id = <id>
and p.id
= b.projectid
and c.businessid
= b.id
Definiera foreign keys med on delete cascade.
Om du definierar en foreign key med on delete cascade från t1 till t2 så innebär det att om du gör delete på poster i t2 så kommer poster som refererar dessa i t1 också att tas bort.
Detta är en inställning man kan göra i MySQL? Eller har jag helt missförstått dig?
Hur löser jag detta bäst isåfall?
Jo, titta under create eller alter table i manualen.
Tackar!
Om jag ska köra med den koden Peter gav mig tills vidare, så funkar det inte riktigt.
Om det inte finns några poster i tbl_business eller tbl_comment så tas inte projektet bort.
*bump*
Melea skrev:
Om jag ska köra med den koden Peter gav mig tills vidare, så funkar det inte riktigt.
Om det inte finns några poster i tbl_business eller tbl_comment så tas inte projektet bort.
Det är bättre att göra rätt från början. Med Lars förslag kan det då se ut enligt:
create table tbl_business(
id int,
projectid int,
primary key (id),
foreign key (projectid)
references tbl_project (id)
on delete cascade
)
Har suttit och testat som en tok nu, men får inte till det.
Att skapa tabellen med foreign key funkar utmärkt, precis enligt din princip Peter.
Men om jag tar bort en post från tbl_project, där jag har en eller flera poster i tbl_business tas inte dessa bort.
Har läst manualen här hur man ska gå tillväga men det vill sig inte.
När jag ska skapa tbl_business lägger jag till
FOREIGN KEY (`projectid`) REFERENCES tbl_project (`id`) ON DELETE CASCADE
Efter PRIMARY KEY.
Detta genererar inga felmeddelanden.
/r Ah, läste nu att det måste vara InnoDB.
Finns det någon liknande syntax för MyISAM eller måste jag konvertera om till InnoDB?
Foreign keys fungerar inte i MYISAM.
Gah, nu blir jag alldeles tokig på det här.
När jag nu ska skapa en tabell (efter att ha pillat i inställningarna i phpMyAdmin för att godkänna relationer mellan tabeller) så står det att den inte kan skapa tbl_project.frm.
Vad är frm för fil och varför går det inte att skapa den?
Ah, nu fick jag igång det!
Hade rört ihop det med att FOREIGN KEY skulle vara på tbl_project, och uppåt.
springer och gömmer mig i skamvrån