数据库高级数据库学习--上机练习9-2(触发器)

Posted caiyishuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库高级数据库学习--上机练习9-2(触发器)相关的知识,希望对你有一定的参考价值。

上机练习9—触发器综合练习
1、 创建一个触发器,使新插入记录中学号位数保持5位且必须以“14”开头,否则撤销相应操作; CREATE TRIGGER Sno_insert ON Student FOR INSERT AS DECLARE @Sno char(10) SELECT @Sno = Sno FROM inserted IF(LEN(@Sno)!=5 or (@Sno NOT LIKE 14%)) BEGIN RAISERROR (学号不符合条件,16,1) ROLLBACK TRANSACTION END

2、 创建一个触发器,防止SC表中的成绩被随意修改; CREATE TRIGGER Grade_update ON Score FOR INSERT AS IF UPDATE(Cscore) BEGIN print 修改失败..... RAISERROR (安全警告:成绩不能修改,16,1) ROLLBACK TRANSACTION END GO

3、 向SC表插入或修改1条记录,通过触发器检查学号和课程号在该表中是否存在,若存在则取消插入或修改操作; CREATE TRIGGER SC_ins ON Score FOR INSERT AS DECLARE @sno varchar(10), @cno char(4), @cscore decimal(3,1) SELECT @sno = Sno,@cno = Cno,@cscore = Cscore FROM inserted IF(@sno in(SELECT Sno FROM Score WHERE @cno=Cno)) PRINT(插入失败) ELSE INSERT INTO Score(Sno,Cno,Cscore) VALUES(@sno,@cno,@cscore) ROLLBACK TRANSACTION GO

4、 创建触发器实现:当向SC表插入记录时,分别检查学号及课程号在Student表和Course表中是否存在,若不存在则阻止该操作; create Trigger SC_ins2 on Score for insert as declare @sno varchar(10),@cno char(4),@cscore decimal(3,1) select @sno = Sno,@cno = Cno,@cscore = Cscore from inserted if(@sno in(select Sno from Score) and @cno in(select Cno from Course)) insert into Score(Sno,Cno,Cscore) values(@sno,@cno,@cscore) else print(插入失败) rollback transaction go

5、 创建触发器实现如下功能:若Course表中的课程号发生变化,在SC表中的对应课程号也相应变化,如课程号“1”变成“10001”,则SC表中相应值也同时变化; create trigger course_change on Course for update as declare @cno_new char(10),@cno_old char(10) select @cno_new = Cno from inserted select @cno_old = Cno from deleted update Score set Cno = @cno_new where Cno = @cno_old go

6、 在学生信息表Student上创建触发器,当数据删除学生记录时,判断如果该学生已经有考试成绩,则不允许删除; create trigger del_stu on Student for delete as declare @sno varchar(10) select @sno = Sno from deleted if(@sno in (select Sno from Score)) print(成绩不得随意修改) else begin delete from Student where Sno = @sno end rollback transaction go

7、 创建触发器实现:当删除学生表中的学生记录时,同步删除选课表中该学生的选课信息; create trigger del_stu2 on Student for delete as declare @sno varchar(10) select @sno = Sno from deleted delete from Score where Sno = @sno go

8、 创建触发器防止用户在删除Student表中信息时进行的误操作(删除记录数大于1),如:执行了delete from Student (忘了加where限制条件)而删除了全部数据。 create Trigger del_stu3 on Student for delete as declare @count int select @count = count(Sno) from deleted if(@count > 1) print(删除失败) rollback transaction go

 

以上是关于数据库高级数据库学习--上机练习9-2(触发器)的主要内容,如果未能解决你的问题,请参考以下文章

Python语言基础与应用 (P16)上机练习:基本数据类型

R语言jiebaR包文本中文分词及词云制作上机练习

第二章:上机练习三 经理评分项目

存储过程

sdut 面向对象程序设计上机练习九(对象指针)

第一次上机练习