SQL server

级联删除

2018-11-18  本文已影响1人  ProgrammingGuy

实现

级联删除(cascade delete)隶属于约束条件(constraint),因此,级联删除需要在约束条件中设置。

实验表
COURSE为课程表,STUDENT为学生表,ENROLLMENT为学生选课表。COURSE的课程号应该与ENROLLMENT的课程号对应。STUDENT的学生号应该与ENROLLMENT的学生号对应。所以ENROLLMENTCNOSNO为外键,分别与COURSE.CNOSTUDENT.SNO关联。
SELECT * FROM COURSE
C601        高等数学        周振兴         NULL
C602        大学英语        王志伟         NULL
C603        数据结构        刘建平         C601      
C604        操作系统        刘建平         C603      
SELECT * FROM STUDENT
1101        王燕          0   20  北京          工程系         NULL
1202        李波          1   21  上海          计算机系        NULL
1203        陈建          1   19  长沙          计算机系        NULL
1303        张斌          1   22  上海          经管系         NULL
1305        张斌          0   20  武汉          经管系         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'
SELECT * FROM STUDENT
1101        王燕          0   20  北京          工程系         NULL
1202        李波          1   21  上海          计算机系        NULL
1203        陈建          1   19  长沙          计算机系        NULL
1303        张斌          1   22  上海          经管系         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

总结

FOREIGN KEY中加入ON DELETE CASCADE可以实现级联删除,但是在执行 SQL 语句时,SQL Server 返回结果为仅有一行数据受到影响,而实际在本例中有三行数据(STUDENT中一行,ENROLLMENT中两行)受到影响,所以级联删除不会通知操作者其他表中是否有数据受到影响。

上一篇下一篇

猜你喜欢

热点阅读