Sql Server_数据完整性

--数据完整性有四种
--    实体:表中的每一行数据都是一个实体。
--    实体完整性:每一行数据是唯一的不重复的。
--    如何保证实体完整性?
--        1.设置标识列
--        2.设置主键,一个表中只能有一个主键
--        3.设置唯一键: 表中的唯一键可以有多个

--域完整性
--    域就是字段,域完整性指的是必须保证字段的值是合理的。
--  体现:非空 类型 check约束 默认值 关系(主外键约束)

--自定义完整性
--    主外键约束、unique约束 check约束 default约束

--引用完整性 
--    一个表中的某个字段引用另一个表中的字段,被引用的表称为主表,引用表称为从表或外键表。
--    建立主外键联系的字段之间的类型和意义必须一致。
--   主表中建立关系的字段必须是主键或者唯一键。

--主外键表之间的级联操作
--    不执行任何操作:删除主表数据,从表如果没有引用所要删除的主表数据,则可以删除。否则会报错。
--    级联:主表数据的删除 会导致 从表中引用 所要删除的主表数据 的那一行数据 也被删除。
--    set null:主表数据的删除 会导致 从表中的引用字段变为null,前提是 该引用字段可以为null。
--    set default:主表数据的删除 会导致 从表中的字段变为默认值,前提是 该引用字段设置了默认值。

use Test
--判断表Teacher是否存在,存在则删除,以下同理。
if exists(select * from sysobjects where name = 'Teacher')
	drop table Teacher
if exists(select * from sysobjects where name = 'Classes')
	drop table Classes

create table Teacher
(
	Id int identity(1, 1),
	Name nvarchar(50) not null,
	Gender bit not null,
	Age int not null,
	Birthday datetime not null
)

create table Classes
(
	Id int identity(1, 1) primary key,
	Name nvarchar(50) not null
)

--约束种类
--	主键约束(primary key PK) 外键约束(foreign key FK) 
--	唯一键约束(unique UQ) 检查约束(check CK) 默认值约束(default DF) 

--级联删除、更新语法
--	on delete no action / cascade / set null / set default
--	on update no action / cascade / set null / set default

--判断主键PK_Teacher_Id'是否存在,存在则删除。
if exists(select * from sysobjects where name = 'PK_Teacher_Id')
alter table Teacher
drop constraint PK_Teacher_Id

--主键约束
alter table Teacher
add constraint PK_Teacher_Id primary key(Id)
--唯一键约束
alter table Teacher
add constraint UQ_Teacher_Name unique(Name)
--检查约束
alter table Teacher
add constraint CK_Teacher_Age check(Age > 0 and Age <= 100)
--默认值约束
alter table Teacher
add constraint DF_Teacher_Birthday default('2000-1-1') for birthday
--外键约束
--判断外键Fk_Teacher_ClassId是否存在,存在则删除。
if exists(select * from sysobjects where name = 'Fk_Teacher_ClassId')
alter table Teacher
drop constraint Fk_Teacher_ClassId
--
alter table Teacher
with nocheck --不检查已有数据
add constraint Fk_Teacher_ClassId foreign key(ClassId) references Classes(Id)
on delete set null  --级联删除 级联更新

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值