級聯(lián)刪除

實現(xiàn)

級聯(lián)刪除(cascade delete)隸屬于約束條件(constraint),因此,級聯(lián)刪除需要在約束條件中設(shè)置。

實驗表

COURSE為課程表,STUDENT為學(xué)生表,ENROLLMENT為學(xué)生選課表。COURSE的課程號應(yīng)該與ENROLLMENT的課程號對應(yīng)。STUDENT的學(xué)生號應(yīng)該與ENROLLMENT的學(xué)生號對應(yīng)。所以ENROLLMENTCNOSNO為外鍵,分別與COURSE.CNO、STUDENT.SNO關(guān)聯(lián)。

  • 數(shù)據(jù)
SELECT * FROM COURSE
C601        高等數(shù)學(xué)        周振興         NULL
C602        大學(xué)英語        王志偉         NULL
C603        數(shù)據(jù)結(jié)構(gòu)        劉建平         C601      
C604        操作系統(tǒng)        劉建平         C603      
SELECT * FROM STUDENT
1101        王燕          0   20  北京          工程系         NULL
1202        李波          1   21  上海          計算機系        NULL
1203        陳建          1   19  長沙          計算機系        NULL
1303        張斌          1   22  上海          經(jīng)管系         NULL
1305        張斌          0   20  武漢          經(jīng)管系         NULL
SELECT * FROM ENROLLMENT
1101        C601        90
1202        C601        72
1202        C602        85
1202        C603        87
1202        C604        NULL
1203        C603        78
1203        C604        80
1305        C601        68
1305        C602        70
  • 代碼
ALTER TABLE COURSE
ADD PRIMARY KEY (CNO)
ALTER TABLE STUDENT
ADD PRIMARY KEY (SNO)
ALTER TABLE ENROLLMENT
ADD FOREIGN KEY (CNO) REFERENCES COURSE(CNO) ON DELETE CASCADE
ALTER TABLE ENROLLMENT
ADD FOREIGN KEY (SNO) REFERENCES STUDENT(SNO) ON DELETE CASCADE

實驗

  • 刪除
DELETE FROM STUDENT WHERE SNO = '1305'
  • 結(jié)果
SELECT * FROM STUDENT
1101        王燕          0   20  北京          工程系         NULL
1202        李波          1   21  上海          計算機系        NULL
1203        陳建          1   19  長沙          計算機系        NULL
1303        張斌          1   22  上海          經(jīng)管系         NULL
SELECT * FROM ENROLLMENT
1101        C601        90
1202        C601        72
1202        C602        85
1202        C603        87
1202        C604        NULL
1203        C603        78
1203        C604        80

總結(jié)

FOREIGN KEY中加入ON DELETE CASCADE可以實現(xiàn)級聯(lián)刪除,但是在執(zhí)行 SQL 語句時,SQL Server 返回結(jié)果為僅有一行數(shù)據(jù)受到影響,而實際在本例中有三行數(shù)據(jù)(STUDENT中一行,ENROLLMENT中兩行)受到影響,所以級聯(lián)刪除不會通知操作者其他表中是否有數(shù)據(jù)受到影響。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容