实验四、数据库的完整性
- 格式:doc
- 大小:554.50 KB
- 文档页数:13
实验四:数据库的完整性
一、实验目的
1. 熟悉主键约束、外键约束、空值、惟一约束的使用方法;
2. 掌握默认值约束和默认对象的使用方法;
3. 掌握check约束及规则的使用方法;
4. 掌握触发器的概念、创建、修改和删除方法;
5. 了解inserted和deleted的作用及数据的引用;
6. 掌握各种触发器的工作过程。
二、实验环境
SQL Server 企业版
三、实验学时
2学时
四、实验内容及步骤
(一)创建学生课程数据库和表
Create database stu_tri
Go
use stu_tri
go
create table s(
sno char(5) not null,
sname char(10),
ssex char(2),
sage int,
sdept char(10),
ssum_credit tinyint)
go
create table c(
cno char(5) not null,
cname char(10),
ccredit tinyint)
go
create table sc(
sno char(5) not null,
cno char(5) not null,
grade tinyint) go
(二)主键约束
--1.学生表
--(1)主键的定义
alter table s add constraint s_pk primary key(sno)
go
--(2)主键约束的违约检查和处理
insert into s values('95001','李莹','女',21,'计科',0)
insert into s values('95001','章张','男',22,'计科',0)
--修改学号为,再次插入数据
insert into s values('95002','章张','男',22,'计科',0)
--(3)依次输入多个学生的记录
insert into s
values
('95003','陈华','女',22,'计科',0),
('95004','吴华义','男',23,'计科',0),
('95005','刘冠章','男',22,'计科',0),
('95006','蒋婷','女',22,'网络',0),
('95007','邱蔚六','男',21,'网络',0),
('95008','王德柱','男',22,'网络',0),
('95009','秦频','女',21,'网络',0),
('95010','程少根','男',21,'网络',0)
--2.课程表c
--(1)主键的定义
alter table c add constraint c_pk primary key(cno)
--(2)主键的检查和处理(省)
--(3)录入数据
insert into c
values
('00001','计算机导论',2), ('00002','高级语言',2),
('00003','离算数学',3),
('00004','数据结构',3),
('00005','c#',2),
('00006','面向对象',2),
('00007','数据库原理',3),
('00008','操作系统',3)
--3.学生选课表
--(1)主键的定义
alter table sc add constraint sc_pk primary key(sno,cno)
go
--(2)主键约束的检查及处理
insert into sc values('95001','00001',90)
go
insert into sc values('95001','00001',86)
go
--(3)录入数据
insert into sc
values
('95001','00002',86),
('95001','00003',92),
('95001','00004',76),
('95001','00005',86),
('95002','00001',86),
('95002','00002',80),
('95002','00003',81),
('95003','00001',88),
('95003','00002',68),
('95004','00001',96),
('95005','00001',69)
(三)参照完整性
--1.定义学生选课表的学号为外键
alter table sc add constraint sc_fk foreign key(sno) references s(sno)
go
alter table sc add constraint sc_fk_1 foreign key(cno) references c(cno)
go
--2.参照完整性约束的检查
--(1)向学生选课表中插入数据—学号外键的检查 insert into sc values('95100','00001',90)
go
--(2)向学生选课表中插入数据—课程号外键的检查
insert into sc values('95006','10000',90)
go
--(3)被参照表数据变化:删除学生表的某一个学生
--1)删除学生选课表中的外键sc_fk
alter table sc drop sc_fk
go
--2)重新定义学生表的外键sc_fk及违约处理机制
alter table sc add constraint sc_fk_sno
foreign key(sno) references s(sno)
on delete cascade
on update cascade
go
--3)查询学生选课表
select * from sc
--4) 删除学生表学号为95003的学生
delete from s where sno='95003'
go
--5) 再次查询学生选课表
select * from sc
go
--更新学生表中学号为的学生学号为-级联更新
update s set sno=95105 where sno like '95005'
go
--查询学生选课表查看学生的学号是否改为
select * from sc
--(四) 用户定义完整性(省略非空约束)
--1. 唯一性约束(学生姓名惟一)
(1)约束的定义
alter table s add constraint s_sname_unique unique(sname) (2)约束的检查和处理
insert into s values('96001','李莹','女',26,'信管',0)
go
2. 检查约束
(1)约束的定义
alter table s add constraint s_c1 check(sage>=12 and sage<=35)
(2)约束的检查及处理
insert into s values('96001','金林','男',9,'信管',0)
go
3. 默认约束
--(1)约束的定义
alter table s add constraint s_def1 default '女' for ssex
(2)约束的检查及处理
insert into s(sno,sname,sdept,ssum_credit) values('96002','胡华林','信管',0)
这时没有给性别赋值,但该学生的性别取了默认值“女”
(五)触发器
--1.insert触发器
--(1)触发器的定义:
--当向sc表中插入一个学生的成绩时,将s表中该学生的总学分加上添加的课程的学分。
CREATE TRIGGER sc_tri_ins
ON sc AFTER INSERT
AS
BEGIN
DECLARE @sno char(5), @cno char(5)
DECLARE @xf tinyint
SELECT @sno=sno, @cno=cno from inserted
SELECT @xf=ccredit FROM c WHERE cno=@cno
UPDATE s SET ssum_credit= ssum_credit +@xf
WHERE sno=@sno
PRINT '修改成功'