当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

浅谈SQL SERVER 2005 之引用完好性[MSSQL防范]

赞助商链接



  本文“浅谈SQL SERVER 2005 之引用完好性[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  为什么想介绍sql server 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 之引用完好性[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 浅谈SQL Server中统计关于查询的影响解析
  • 浅谈SQL SERVER 2005 之引用完好性
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .