浅谈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默许会挑选你所在的表,并且不能更改.(不包含在“数据库关系图”中成立)
假如在学生表(Students)中的某个学生,在成就表(Score)中有相关的测验成就,那么在学生表(Students)中删除该学生,将会报错:
消息 547,级别 16,状况 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK_Score_Score"冲突.该冲突发生于数据库"student",表"dbo.Score", column 'StudentID'.
语句已终止.
是不是说我们在删除大概更改主表中的某条记录的时刻,就一定要在整个数据库中,对该键值的全部引用的从表的记录举行呼应一致的删除或更改呢?
是的!但我们可以让数据库帮我们代劳.
sql server 2005之引用完好性的新特点登场:
挑选从表――> 右键“改正”――>右键“关系”――>挑选一个关系名便可以看到以下图所示:
INSERT 和 UPDATE 标准
删除法则和更新法则:
指定当数据库的终究用户尝试删除或更新某一行,而该行包含外键关系所触及的数据时所发生的情形.
假如设置为:
无操作:当在删除或更新主键表的数据时,将显示一条错误信息,奉告用户不答应履行该删除或更新操作,删除或更新操作将会被回滚.
层叠:删除或更新包含外键关系中所触及的数据的全部行.
阐明:“层叠”在SQL server 2000中又叫“级联”.
设置空:这是SQL server 2005新增的功效.假如表的全部外键列都可以承受空值,则将该值设置为空.
阐明:要将外键的删除法则和更新法则设为“设置空”,则该外键必须是可认为空的字段.
设置默许值:这是SQL server 2005新增的功效.假如表的全部外键列都已定义了默许值,则将该值设置为该列定义的默许值.
阐明:要将外键的删除法则和更新法则设置为“设置默许值”,该外键必须是有默许值的字段.
附加:
特地查看了一下SQL server 2000,在它的“关系”中也包含了以下功效:
至于SQL server 2005新增的功效,预计用触发器应当可以实现吧,没有研究就不多言了.
相关引用:
级联运行(Cascaded operation)
触发器是自动的:它们在对表的数据作了任何改正(比方手工输入大概利用程序采纳的操作)之后当即被激活.
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容.比方,某个表上的触发器中包含有对别的一个表的数据操作(如删除,更新,插入)而该操作又招致该表上触发器被触发.
比方,通过触发器对数据库中的相关表举行层叠更改:
在 titles 表的 title_id 列上写入一个删除触发器,以使别的表中的各匹配行采纳删除操作.该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行举行定位.
以上是“浅谈SQL SERVER 2005 之引用完好性[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |