sql级联删除


在SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。

数据完整性分类

在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:

实体完整性 
域完整性 
引用完整性 
用户定义完整性

引用完整性

引用完整性又称参照完整性。引用完整性用来保证主表和从表之间的数据一致性,它通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。

强制引用完整性时,SQL Server 将防止用户执行下列操作:

在主表中没有关联的记录时,将记录添加或更改到相关表中。

更改主表中的值,这会导致相关表中生成孤立记录。

从主表中删除记录,但仍存在与该记录匹配的相关记录。

也就是说,如果数据库的表之间为了确保数据的一致性,建立了引用完整性之后,则要求:

1、 在主表中,当其主键值被其从表所参照时,该行不能被删除也不允许改变;

2、 在从表中,不允许参照主表中不存在的主键值。

3、 如果主表的键值更改了,那么在整个数据库中,对该键值的所有引用的从表要进行一致的更改;

简单的示例:

建立一个StuGrade数据库,建立了学生表(Student)和成绩表(Score),Student表的学号字段stuNo与Score表的stuNo字段建立了引用完整性约束(主外键关系):

注意:在SQL SERVER 2005中,建立主外键关系应该在从表中建立。因为在选择从表时,在SQL SERVER 2005默认会选择你所在的表,并且不能更改。(不包含在“数据库关系图”中建立)

如果在学生表(Student)中的某个学生,在成绩表(Score)中有相关的考试成绩,那么在学生表(Student)中删除该学生,将会报错:

DELETE 语句与 REFERENCE 约束"FK_Score_Score"冲突。该冲突发生于数据库"student",表"dbo.Score", column 'stuNo'。

其实我们在删除或者更改主表中的某条记录的时候,不一定要在整个数据库中,对该键值的所有引用的从表的记录进行相应一致的删除或更改。也可以这样做:

SQL SERVER 2005中引用完整性的新特性:

选择从表--> 右键“关系 ”--> 选择一个关系名,就可以看到如下所示:


(注:在sql2005中是层叠,在sql2008中为级联,其实两者一样)
INSERT 和 UPDATE 规范

删除规则和更新规则:

      指定当数据库的最终用户尝试删除或更新某一行,而该行包含外键关系所涉及的数据时所发生的情况。

相关设置说明:

无操作:当在删除或更新主键表的数据时,将显示一条错误信息,告知用户不允许执行该删除或更新操作,删除或更新操作将会被回滚。

层叠:删除或更新包含外键关系中所涉及的数据的所有行。

说明:“层叠”在SQL Server 2000中又叫“级联”。

设置空:这是SQL Server 2005新增的功能。如果表的所有外键列都可以接受空值,则将该值设置为空。

说明:要将外键的删除规则和更新规则设为“设置空”,则该外键必须是可以为空的字段。

设置默认值:这是SQL Server 2005新增的功能。如果表的所有外键列都已定义了默认值,则将该值设置为该列定义的默认值。

说明:要将外键的删除规则和更新规则设置为“设置默认值”,该外键必须是有默认值的字段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值