student表(id主键)
id   name
001  王刚
002  李双
grade表(studentId为外键)
id,  studentId, score
1     001        60
2     002         70
现想求一SQL语句,删除student表id为001的信息,则同时删除子表相应数据. 用一条SQL语句能否实现做项目的时候通常如何处理这样的问题.

解决方案 »

  1.   


    ALTER TABLE [dbo].[student] ADD 
    CONSTRAINT [FK_grade_student] FOREIGN KEY 
    (
    [id]
    ) REFERENCES [dbo].[student] (
    [id]
    ) ON DELETE CASCADE  ON UPDATE CASCADE 
    GO你建表的时候建个关系嘛,那样代码都省了
      

  2.   

    1 建表的时候级联删除的关系
    2 写两条SQL
      

  3.   

    也可用觸發器
    create trigger del_student on student
    after delete
    as
    delete grade from studentId in(select ID from deleted)推薦用級聯刪除
      

  4.   

    楼主朋友,现在很多数据库都推荐使用级联才保持表间的联系和一致行,不提倡使用触发器,因为触发器太浪费资源了.一楼楼友给出了如何通过级联来实现表间的一致性,我就不再重复代码了.这里说一下,一楼楼友有个笔误就是第一行代码ALTER TABLE [dbo].[student] ADD  在添加外键约束时,应当把约束加给被动表grade,不是主表Student,正确的代码如下:ALTER TABLE [dbo].[grade] ADD 
        CONSTRAINT [FK_grade_student] FOREIGN KEY 
        (
            [studentId]
        ) REFERENCES [dbo].[student] (
            [id]
        ) ON DELETE CASCADE  ON UPDATE CASCADE 在运行这个代码前要保证2个表已经保持了一致性,既成绩表里的学生不能不在学生表里登记.否则建立约束会失败.