级联删除

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

    相关文章

      网友评论

        本文标题:级联删除

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