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我會碰到的問題,因爲它試圖刪除這並不存在有什麼事。所以我需要以某種方式能夠檢查它是否存在之前刪除莫名其妙,這是我的問題。
「不過,如果這個SSN不CompanyWorker存在,我會碰到的問題,因爲它是試圖刪除那裏不存在的東西,所以我需要以某種方式檢查它是否存在,然後刪除它,這是我的問題。「,不,它不會,它不會刪除任何東西。如果SSN不存在,則不會有錯誤,它不會刪除任何內容。有3個刪除語句是好的。 –
沒有3個刪除語句的問題,它不會因爲你的SSN不存在而崩潰,它只會刪除沒有行。您可以在外鍵上添加DELETE CASCADE子句,因此當您刪除PERSON時,它將刪除與其他表中關聯的所有行。 – FloChanz
查找引用完整性和級聯刪除 - 應該給你你需要的。 – Andrew