例如:
有下面五张表,五张表之间都通过主外键关联
Dept(DepId,DepName)Student(StuId,StuName,DepId)Teacher(TeacherId,TeacherName)Course(CourseId,CousreName,TeacherId)Score(CourseID,StuId,Score)现在如果对Dept表中,DepId进行修改或者删除,怎么修改?最好能有代码说明!!!

解决方案 »

  1.   

    如果有外键约束直接删除是删除不了的。
    使用触发器又比较麻烦。建议删除以前先做下判断。--例如:
    Dept(DepId,DepName)Student(StuId,StuName,DepId)
    --删除一个DepIddelete from Dept where DepId=@DepId --传入的变量 (直接这样可以会报错)if(select count(*) from Student where DepId=@DepId )>0
    select '存在约束不能删除'
    else
    delete from Dept where DepId=@DepId
      

  2.   

    1.把依赖你想修改的DepId的其它表上的对应记录删除
    2.修改DepId
    3.修复其它表上对应的记录
      

  3.   

    ON DELETE CASCADE
    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。ON UPDATE CASCADE
    指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。
    修改外键的属性添加上述。
      

  4.   

    1.原则上像这些主外建ID不应该出现修改
    2.要修改使用级联修改 ON UPDATE CASCADE
     a.删除Student上原来的外键约束
     b. alter table Student add constraint FK_S_id reference Dept(DepId) on update cascade;