2013-10-01 56 views
0
create table Person(
    SSN INT, 
    Name VARCHAR(20), 
    primary key(SSN) 
); 
create table Company(
CompanyID INT, 
Name VARCHAR(20) 
primary key(SSN) 

create table Car(
    PlateNr INT, 
    Model VARCHAR(20), 
    primary key(PlateNr) 
); 

create table CarOwner(
    SSN INT, 
    PlateNr INT, 
    primary key(SSN, PlateNR) 
    foreign key(SSN) references Person (SSN), 
    foreign key(PlateNr) references Car (PlateNr) 
); 

create table CompanyWorker(
    SSN INT, 
    CompanyID INT 
    primary key(SSN, CompanyID), 
    foreign key(SSN) references Person (SSN), 
    foreign key(CompanyID) references Company (CompanyID) 
); 

Insert into Person(SSN, Name) VALUES ('123456789','Max'); 
Insert into Person(SSN, Name) VALUES ('123456787','John'); 
Insert into Person(SSN, Name) VALUES ('123456788','Tom'); 

insert into Company(CompanyID, Name) VALUES('1','IKEA'); 
insert into Company(CompanyID, Name) VALUES('2','Starbucks'); 

Insert into Car(PlateNr, Model) VALUES ('123ABC','Volvo'); 
Insert into Car(PlateNr, Model) VALUES ('321CBA','Toyota'); 
Insert into Car(PlateNr, Model) VALUES ('333AAA','Honda'); 

Insert into CarOwner(SSN, PlateNr) VALUES ('123456789','123ABC'); 
Insert into CarOwner(SSN, PlateNr) VALUES ('123456787','333AAA'); 
Insert into CarOwner(SSN, PlateNr) VALUES ('123456788','321CBA'); 

insert into CompanyWorker(SSN, CompanyID) VALUES('123456789','1'); 
insert into CompanyWorker(SSN, CompanyID) VALUES('123456787','1'); 

這是我的表格,並插入到這些表格中,我遇到的問題是刪除一個人。我希望能夠從「人」表中刪除的人,例如刪除多個表中的數據

DELETE FROM Person WHERE SSN = '123456789'; 

但問題是,我必須從所有的說人有關係的其他表中刪除的人。人與CarOwner和CompanyWorker有關係。當然,我可以簡單地同時執行3單獨刪除語句:

DELETE FROM Person WHERE SSN = '123456789'; 
DELETE FROM CarOwner WHERE SSN = '123456789'; 
DELETE FROM CompanyWorker WHERE SSN = '123456789'; 

不過,如果這個SSN不存在CompanyWorker我會碰到的問題,因爲它試圖刪除這並不存在有什麼事。所以我需要以某種方式能夠檢查它是否存在之前刪除莫名其妙,這是我的問題。

+2

「不過,如果這個SSN不CompanyWorker存在,我會碰到的問題,因爲它是試圖刪除那裏不存在的東西,所以我需要以某種方式檢查它是否存在,然後刪除它,這是我的問題。「,不,它不會,它不會刪除任何東西。如果SSN不存在,則不會有錯誤,它不會刪除任何內容。有3個刪除語句是好的。 –

+0

沒有3個刪除語句的問題,它不會因爲你的SSN不存在而崩潰,它只會刪除沒有行。您可以在外鍵上添加DELETE CASCADE子句,因此當您刪除PERSON時,它將刪除與其他表中關聯的所有行。 – FloChanz

+0

查找引用完整性和級聯刪除 - 應該給你你需要的。 – Andrew

回答

1

如果你使用MSSQL數據庫引擎,您可以通過ALTER TABLE添加與在外國約束DELETE CASCADE

ALTER TABLE CarOwner 
    ADD CONSTRAINT FK_CarOwner_SSN 
     FOREIGN KEY (SSN) 
     REFERENCES Person (SSN) 
     ON DELETE CASCADE