数据完整性简介

                                                                                  数据完整性
 强制数据完整性可保证数据库中数据的质量。
 
 1.实体完整性
  实体完整性将行定义为特定表的唯一实体。
  实体完整性通过 UNIQUE 索引、UNIQUE 约束或 PRIMARY KEY 约束,强制表的标识符列或主键的完整性。
 
 2.域完整性
  完整性指特定列的项的有效性
  您可以强制域完整性限制类型(通过使用数据类型)、限制格式(通过使用 CHECK 约束和规则)或限制可能值的范围(通过使用 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。
 
 3.引用完整性
 输入或删除行时,引用完整性保留表之间定义的关系
 在 SQL Server 中,引用完整性通过 FOREIGN KEY 和 CHECK 约束,以外键与主键之间或外键与唯一键之间的关系为基础。引用完整性确保键值在所有表中一致。
 这类一致性要求不引用不存在的值,如果一个键值发生更改,则整个数据库中,对该键值的所有引用要进行一致的更改。
 强制引用完整性时,SQL Server 将防止用户执行下列操作:
  a.在主表中没有关联行的情况下在相关表中添加或更改行。
  b.在主表中更改值(可导致相关表中出现孤立行)。
  c.在有匹配的相关行的情况下删除主表中的行。--这个特点可以保护你的一些重要表不被误删

 

  --测试

if OBJECT_ID('tb1') is not null

drop table tb1 

go

create table tb1 (a int  primary key ,value int)

insert tb1 select 1,

union select 2,23 

union select 3,32

go

if OBJECT_ID('tb2') is not null

drop table tb2 

go

create table tb2 (a int references tb1(a),value int)

insert tb2 select 1,4

go

--测试:向TB2中加入TB1中没有的A

insert tb2 select 6,4

/*INSERT 语句与FOREIGN KEY 约束"FK__tb2__a__2E1BDC42"冲突。该冲突发生于数据库"tempdb",表"dbo.tb1", column 'a'*/

--测试:删除TB1中的a值为的行,使TB2中值为的行孤立

delete tb1 where a=1

/*INSERT 语句与FOREIGN KEY 约束"FK__tb2__a__2E1BDC42"冲突。该冲突发生于数据库"tempdb",表"dbo.tb1", column 'a'*/

--测试:假设我们的TB1非常重要,而设置了TB2作为它的外表,这样可以起到保护TB1被误删的可能

drop table tb1

/*无法删除对象'tb1',因为该对象正由一个FOREIGN KEY 约束引用*/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值