博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈数据库的完整性
阅读量:4651 次
发布时间:2019-06-09

本文共 1646 字,大约阅读时间需要 5 分钟。

数据库操作的时候必须要实现数据库的完整性,在实现数据库的完整性的时候,有两种方式都可以实现数据库的完整性,第一种是通过完整性的约束实现数据库的完整性,第二种就是通过用户创建自定义的触发器实现数据库的完整性。

一、完整性约束实现数据库的完整性

(一)主键约束

谈到主键约束的话,我就通过几个例子来实现创建主键约束

(1) 对student表添加主键约束

alter table student add constraint PK1 primary key(sno)

 (2) 对sc表添加主键约束

alter table scadd constraint PK3 primary key(sno,cno)

(二)外键约束

创建sc表的外键约束

alter table scadd constraint PK4 foreign key(sno) references student(sno);alter table scadd constraint PK5 foreign key(cno) references course(cno);

 (三)check约束

修改student表,使用Check约束,使Sex列只能接受“男”或“女”,以强制执行域数据完整性。

alter table studentadd constraint c1 check(ssex in('男','女'))

 

(四)删除约束

删除SC表中的C3,C4外键约束。

alter table sc drop constraint pk4alter table sc drop constraint pk5

 

二、创建自定义触发器实现数据库完整性

(一)创建一个修改用户记录的触发器

创建触发器trigger_t1,实现当修改学生表(student)中的学生姓名时,显示提示信息“学生姓名被修改了!!!”。

create trigger trigger_t1 on student for update as if update(sname)beginprint '触发器执行'end

 验证触发器:UPDATE STUDENT SET SNAME='55555' WHERE  SNO='95001'

(二)创建一个删除用户记录的触发器

在学生成绩库中创建触发器trigger_t2,实现如下功能:当在学生表(student)中删除一条学生信息后,自动实现删除该学生在学生选课表(sc)中的选课信息。

create trigger trigger_t2on student for deleteas declare @sno_del varchar(10) select @sno_del=sno from deleteddelete from sc where sno = @sno_del

 验证触发器:delete from student where sno='95001'

(三)创建一个级联修改用户信息的触发器

创建触发器trigger_t3,实现当修改学生表(student)中的某个学生的学号时,对应学生成绩表(sc)中的学号也作修改。

create trigger trigger_t3on student for update asif update(sno)begindeclare @sno_new varchar(10),@sno_old varchar(10)select @sno_old=sno from deletedselect @sno_new=sno from insertedupdate sc set sno=@sno_new where sno = @sno_oldend

 验证触发器:update student set sno='123456' where sno= '95002 '

 

转载于:https://www.cnblogs.com/zhjsll/p/4124789.html

你可能感兴趣的文章
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>
mechanize (1)
查看>>
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>
孩子教育
查看>>
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
Java反射中method.isBridge() 桥接方法
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>