级联删除

作者: ProgrammingGuy | 来源:发表于2018-11-18 15:30 被阅读1次

实现

级联删除(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中两行)受到影响,所以级联删除不会通知操作者其他表中是否有数据受到影响。

相关文章

  • 级联删除

    实现 级联删除(cascade delete)隶属于约束条件(constraint),因此,级联删除需要在约束条件...

  • iview踩坑

    1、iview三级联动,删除效果实现 需求:省市区的三级联动,并且有删除效果,执行删除时,后面的一项也需要删除;当...

  • 数据保存(四) 立即执行中删除

    1.级联删除子表 删除数据的同时,删除引用这条记录的子表的数据,可以通过在数据表设计中,对于引用字段,勾选上级联删...

  • EF Core级联删除的设定

    EF6和EF Core都支持级联删除。EF6要禁止级联删除是在数据库上下文的OnModelCreating方法中设...

  • EFCore级联删除

    可以利用级联删除去掉一条记录相关的所有记录,就不需要一个个去删除关联表记录。之所以注意到这个是因为现在项目中的业务...

  • hibernate级联删除

    hibernate级联删除,有三个实体类,一级分类(category),二级分类(categorySecond)文...

  • JPA-常用功能

    关于级联(级联删除) 我始终没研究清楚cascade=CascadeType.PERSIST之类的,有时间待补。级...

  • JAVA WEB开发笔记

    级联删除(ON DELETE CASCADEurl: jdbc:mysql://localhost:3306/my...

  • jpa 级联

    jpa级联 对应项里面似乎不用再做处理了 在做级联删除的时候应该@onetomany里面的orphanRemova...

  • Finalizers

    前言 Kubernetes 中的对象删除并不像表面上看起来那么简单,删除对象涉及一系列过程,例如对象的级联和非级联...

网友评论

    本文标题:级联删除

    本文链接:https://www.haomeiwen.com/subject/kgkgfqtx.html