数据库操作的时候必须要实现数据库的完整性,在实现数据库的完整性的时候,有两种方式都可以实现数据库的完整性,第一种是通过完整性的约束实现数据库的完整性,第二种就是通过用户创建自定义的触发器实现数据库的完整性。
一、完整性约束实现数据库的完整性
(一)主键约束
谈到主键约束的话,我就通过几个例子来实现创建主键约束
(1) 对 student 表添加主键约束
alter
table
student
add
constraint
PK1
primary
key
(sno)
(2) 对 sc 表添加主键约束
alter
table
sc
add
constraint
PK3
primary
key
(sno,cno)
(二)外键约束
创建sc表的外键约束
alter
table
sc
add
constraint
PK4
foreign
key
(sno)
references
student(sno);
alter
table
sc
add
constraint
PK5
foreign
key
(cno)
references
course(cno);
(三)check 约束
修改student表,使用Check约束,使Sex列只能接受“男”或“女”,以强制执行域数据完整性。
alter
table
student
add
constraint
c1
check
(ssex
in
(
'
男
'
,
'
女
'
))
(四)删除约束
删除SC表中的C3,C4外键约束。
alter
table
sc
drop
constraint
pk4
alter
table
sc
drop
constraint
pk5
二、创建自定义触发器实现数据库完整性
(一)创建一个修改用户记录的触发器
创建触发器 trigger_t1 ,实现当修改学生表 (student) 中的学生姓名时,显示提示信息“学生姓名被修改了 !!! ”。
create
trigger
trigger_t1
on
student
for
update
as
if
update
(sname)
begin
print
'
触发器执行
'
end
验证触发器:UPDATE STUDENT SET SNAME='55555' WHERE SNO='95001'
(二)创建一个删除用户记录的触发器
在学生成绩库中创建触发器 trigger_t2 ,实现如下功能:当在学生表( student )中删除一条学生信息后,自动实现删除该学生在学生选课表( sc )中的选课信息。
create
trigger
trigger_t2
on
student
for
delete
as
declare
@sno_del
varchar
(
10
)
select
@sno_del
=
sno
from
deleted
delete
from
sc
where
sno
=
@sno_del
验证触发器:delete from student where sno='95001'
(三)创建一个级联修改用户信息的触发器
创建触发器 trigger_t3 ,实现当修改学生表( student )中的某个学生的学号时,对应学生成绩表( sc )中的学号也作修改。
create
trigger
trigger_t3
on
student
for
update
as
if
update
(sno)
begin
declare
@sno_new
varchar
(
10
),
@sno_old
varchar
(
10
)
select
@sno_old
=
sno
from
deleted
select
@sno_new
=
sno
from
inserted
update
sc
set
sno
=
@sno_new
where
sno
=
@sno_old
end
验证触发器:update student set sno='123456' where sno= '95002 '

