2012-11-18 70 views
122

如果我有一個數據庫中的兩個關係,就像這樣:SQL ON DELETE CASCADE,刪除發生在哪一種方式?

CREATE TABLE Courses (
    CourseID int NOT NULL PRIMARY KEY, 
    Course VARCHAR(63) NOT NULL UNIQUE, 
    Code CHAR(4) NOT NULL UNIQUE 
); 

CREATE TABLE BookCourses (
    EntryID int NOT NULL PRIMARY KEY, 
    BookID int NOT NULL, 
    Course CHAR(4) NOT NULL, 
    CourseNum CHAR(3) NOT NULL, 
    CourseSec CHAR(1) NOT NULL 
); 

和我建立兩者之間的外鍵關係,是這樣的:

ALTER TABLE BookCourses 
ADD FOREIGN KEY (Course) 
REFERENCES Courses(Code) 
ON DELETE CASCADE; 

然後你就可以看到Course屬性在BookCourses關係中引用Courses關係中的Code屬性。

我的問題是當兩個關係中的任何一個發生刪除時,刪除級聯的方式是什麼?如果我刪除Courses關係中的一個元組,它是否會刪除BookCourses關係中的所有引用元組,還是相反?

謝謝你的時間。

+7

一個只有想知道爲什麼了'Categories'表中有一個'CourseID'作爲主鍵,而'Courses'表具有'EntryID'。你真的需要重新考慮你的命名選擇。 –

+4

請用戶使用正確的列名以避免混淆並清除數據庫結構。 –

回答

152

當您刪除表Courses上的內容時,級聯將工作。表BookCourses上的任何參考表Courses的記錄也將被刪除。

但是當你試圖刪除表BookCourses只表本身的影響,而不是在Courses

後續問題:爲什麼你有CourseID表上分類?

也許你應該調整你的模式成這樣,

CREATE TABLE Categories 
(
    Code CHAR(4) NOT NULL PRIMARY KEY, 
    CategoryName VARCHAR(63) NOT NULL UNIQUE 
); 

CREATE TABLE Courses 
(
    CourseID INT NOT NULL PRIMARY KEY, 
    BookID INT NOT NULL, 
    CatCode CHAR(4) NOT NULL, 
    CourseNum CHAR(3) NOT NULL, 
    CourseSec CHAR(1) NOT NULL, 
); 

ALTER TABLE Courses 
ADD FOREIGN KEY (CatCode) 
REFERENCES Categories(Code) 
ON DELETE CASCADE; 
+5

太棒了!謝謝。 *跟進答案:因爲我的方式結束了。現在修復...並在我的DB * –

+51

這個答案有不同的表名和結構比問題...使它遠沒有用。 –

+0

不工作... – user3177068