数据库操作的时候必须要实现数据库的完整性,在实现数据库的完整性的时候,有两种方式都可以实现数据库的完整性,第一种是通过完整性的约束实现数据库的完整性,第二种就是通过用户创建自定义的触发器实现数据库的完整性。
一、完整性约束实现数据库的完整性
(一)主键约束
谈到主键约束的话,我就通过几个例子来实现创建主键约束
(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 '