当前位置:文档之家› 数据库原理与使用技术原理实验六

数据库原理与使用技术原理实验六

云南大学软件学院实验报告课程:数据库原理与实用技术实验任课教师:包崇明,朱艳萍姓名:冉荣华学号:20121070074 专业:数字媒体技术成绩:实验6 数据库完整性实验6-1 完整性约束1、在学生表上面创建下列约束(1)创建入学日期约束“Enter_University_date_rule”,假定该学校于1923年4月30日创建。

要求:入学日期必须大于等于学校创建日期,并且小于等于当前日期alter table学生表add constraint Enter_University_date_rulecheck (入学日期>'1923-04-30'and入学日期<getdate())(2)创建学生年龄约束“Age_rule”。

要求:学生年龄必须在15~30岁之间alter table学生表add constraint Age_rulecheck (年龄>15 and年龄<30)(3)创建学生性别约束“Sex_rule”。

要求:性别只能为“男”或“女”alter table学生表add constraint Sex_rulecheck (性别='男'or性别='女')(4)创建学生成绩约束“Score_rule”。

要求:学生成绩只能在0~100之间alter table成绩表add constraint Score_rulecheck (成绩>=0 and成绩<=100)(5)用图形方法查看学生成绩约束“Score_rule”,截图为:2、删除约束Enter_University_date_rulealter table学生表drop constraint Enter_University_date_rule3、创建声明式默认约束:在创建表的过程中创建声明式默认约束(1)创建表“default_example”,表中包含字段pid、name、sex、age。

要求设定sex的默认值为“男”、age的默认值为18。

创建语句:create table default_example(编号int,姓名char(12),性别char(5)constraint sex_default default'男',年龄int constraint age_default default 18)insert into default_example(编号,姓名,性别)values(101,'苏晴','女')insert into default_example(编号,姓名,年龄)values(201,'马拯山','20')执行结果为:查看:select*from default_example表(图形查看)的结果(2)插入一条编号为100 的记录,执行结果为:alter table default_exampleadd default 100 for编号结果:(3)修改默认值一般先删除老的默认约束,再新建一个默认约束删除约束:alter TABLE default_example drop 约束名新建默认约束:alter TABLE default_example add constraint df_age default(19) for age请将年龄默认值更改为19,执行结果为:删除约束:alter table default_exampledrop age_default更改约束(默认值)alter table default_exampleadd constraint age_default default 19 for年龄图形化查看:4、在“学生管理数据库”各个数据表中建立相应的主键、外键、惟一值、以及check约束,要求:学生的年龄必须是两位数,其中第一位是1或2:学生表授课表:课程表:成绩表:删除check 约束:删除check 约束:学生表:授课表:课程表:成绩表:5、完成教科书456页如下习题:[7.1]a:实验6-2 触发器1、使用触发器(1)创建一个触发器trig_update,返回对“学生表”进行更新操作后,被更新的记录条数create trigger trig_update on学生表 after updateas print'Trigger Output:'+convert(varchar(5),@@rowcount)+'rows wereupdated.'(2)执行触发器update学生表set年龄='20'where姓名='李涛'(3)修改触发器trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息alter trigger trig_update on学生表for updateas print'Trigger Output:'+convert(varchar(5),@@rowcount)+'rows were updated.' print'Inserted:'select*from insertedupdate学生表set年龄='19'where姓名='李涛'2、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。

(1)在“学生表”上创建触发器ins_del_sample,在对学生表进行插入、删除或更新操作后,分别从inserted表和deleted表中查询学生学号、姓名、性别、年龄和所在院系。

(请同学们在做删除操作时,注意备份)create trigger ins_del_sample on学生表for update,insert,delete asprint'Inserted:'select学号,姓名,性别,年龄,所在院系from insertedprint'Deleted:'select学号,姓名,性别,年龄,所在院系from deletedreturn(2)执行插入、删除和更新操作后返回的表有什么区别?insert into学生表values('20091202','张三','男','21','计算机','软件班','2009/8/26')delete from学生表where学号='20091202'update学生表set姓名='谢四'where学号='20091202'3、使用系统存储过程查看触发器(1)显示触发器trig_update的一般信息(2)显示触发器trig_update的源代码(3)显示“学生表”上所有的依赖关系Exec sp_depends学生表(4)显示触发器trig_update所引用的对象Exec sp_depends trig_update4、难题(注意inserted表和deleted表的使用,并请自己修改数据表)(1)为“成绩表”创建一个触发器,当向表中插入数据时,如果成绩大于等于60分,该学生就能得到相应的学分,否则,该学生不能得到学分。

create trigger score_triggeron成绩表after insert asdeclare @grade floatdeclare @score floatselect @grade=成绩from insertedselect @score=学分from insertedupdate成绩表set学分=(casewhen @grade>=60 then @scoreelse 0end)where学号=(select学号from inserted)若插入一个成绩<60的记录后显示:若插入一个成绩>=60的记录后显示:(2)为“学生表”创建一个触发器,当删除表中的一个学生资料时,将“成绩表”中的相应记录也删除掉原成绩表:删除后:(3)为“成绩表”创建一个触发器,如果成绩由原来的小于60分更改为大于等于60分时,该学生就得到相应的学分,如果成绩由原来的大于等于60分更改为小于60分,则该学生的相应学分更改为0。

create trigger score_trigger on成绩表after updateasdeclare @grade floatdeclare @score floatselect @grade=成绩from insertedselect @score=学分from insertedupdate成绩表set学分=(casewhen @grade>=60 then @scoreelse 0end) where学号=(select学号from inserted)原始:将学号='20023001' and 课程号='C802'的成绩由99改为555、完成教科书456页如下习题:[7.11]a:当输入不存在customers的city时显示:[7.11]b:原PRODUCTS:插入一条记录(1011,'jan','c001','a01','p01',1000,450)后,PRODUCTS表的变化:。

相关主题