实验四、数据库的完整性

  • 格式: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 '修改成功'