浅谈SQL SERVER 2005 之引用完整性

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:


很久没有写点什么了,乘着空闲,把我最近在使用SQL SERVER 2005中的这一点有意思的新发现写出来分享一下。

 

为什么想介绍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中的这些功能,在SQL Server 2000中用触发器应该可以实现,没有研究就不多言了。
在SQL Server 2000中的级联运行:

------------------------------------------- 引 用 ---------------------------------------------------------
级联运行(Cascaded operation)

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

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

例如,通过触发器对数据库中的相关表进行层叠更改:
在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

--------------------------------------------------------------------------------------------------------------

文章推荐:

一个索引查找的ASP.NET示例探讨

研究了一下SqlExpress中的外键约束

SQL Server中约束的介绍

定义SQL Server层叠引用完整性约束

 




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/08/08/1263678.html,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
打赏
0
0
0
0
46
分享
相关文章
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
10月前
|
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
265 13
|
10月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
163 9
|
10月前
|
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
749 1
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
756 3
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
9月前
|
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
689 0
SQL Server 查询超时问题排查
【7月更文挑战第8天】排查 SQL Server 查询超时涉及五个主要方面:检查复杂查询、评估服务器性能、审视配置参数、更新统计信息和分析执行计划。关注点包括查询的结构(如连接、子查询和索引),服务器资源(CPU、内存、网络延迟),连接和内存设置,以及统计信息的时效性。通过这些步骤可定位并解决性能瓶颈。
282 0

热门文章

最新文章