您当前的位置: 首页 > 数据库教程 > MSSQL教程 > 浅谈SQL SERVER 2005 之引用完整性

浅谈SQL SERVER 2005 之引用完整性

作者: 来源: 发布时间: 2010-06-05 16:53 点击:
为什么想介绍SQL server 2005 的引用完整性: 一是因为在SQL server 2005中,添加了SQL server 2000中没有的一些新功能,而这又很少被人们注意到; 二是对于SQL SERVER数据库的初学者来说,引用完整性往往是他们难以理解和掌握的。 在SQL Server联机丛书中,将数据完整

浅谈SQL SERVER 2005 之引用完整性

  为什么想介绍 2005 的引用完整性:

  一是因为在SQL server 2005中,添加了SQL server 2000中没有的一些新功能,而这又很少被人们注意到;

  二是对于SQL SERVER的初学者来说,引用完整性往往是他们难以理解和掌握的。

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

  数据完整性分类

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

  实体完整性

  域完整性

  引用完整性

  用户定义完整性

  引用完整性

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

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

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

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

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

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

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

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

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

  简单的示例:

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

浅谈SQL SERVER 2005 之引用完整性

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

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

浅谈SQL SERVER 2005 之引用完整性

  消息 547,级别 16,状态 0,第 1 行

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

  语句已终止。

  是不是说我们在删除或者更改主表中的某条记录的时候,就一定要在整个数据库中,对该键值的所有引用的从表的记录进行相应一致的删除或更改呢?

  是的!但我们可以让数据库帮我们代劳。

  sql server 2005之引用完整性的新特性登场:

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

浅谈SQL SERVER 2005 之引用完整性

  INSERT 和 UPDATE 规范

浅谈SQL SERVER 2005 之引用完整性

  删除规则和更新规则:

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

  如果设置为:

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

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

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

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

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

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

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

  附加:

  特地查看了一下SQL server 2000,在它的“关系”中也包括了如下功能:

浅谈SQL SERVER 2005 之引用完整性

  至于SQL server 2005新增的功能,估计用触发器应该可以实现吧,没有研究就不多言了。

  相关引用:

  级联运行(Cascaded operation)

  触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

  触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

  例如,通过触发器对数据库中的相关表进行层叠更改:

  在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

分享到:
本文"浅谈SQL SERVER 2005 之引用完整性"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4