实验报告课程名称数据库安全内容数据库完整性的实现指导教师岳清起止日期2016.10.10-11.1提交日期2016.11.8学院计算机学院系别专业软件工程学生姓名肖庆都班级/学号_软工1401/2014011352成绩___________________一、实验目的掌握实体完整性、参照完整性和用户定义完整性的实现方法,通过实验,进一步理解数据完整性的含义和重要性。二、实验内容1.创建数据库dbsecurity,包含三个表:employee、job和employee_log表,分别记录员工信息、职务信息和离职员工信息。表1employee字段名数据类型和长度是否主键空否说明emp_idChar(10)是Notnull员工编号nameVarchar(12)Notnull姓名genderChar(2)Notnull性别telVarchar(15)null电话idchar(18)Notnull身份证号码job_idTinyintNotnull职务编号job_lvlintNotnull职务级别hire_dateDatetimeNotnull入职日期表2job字段名数据类型和长度是否主键空否说明job_idTinyint是Notnull职务编号job_descVarchar(100)Notnull职务描述min_lvlintNotnull最小级别max_lvlintNotnull最大级别表3employee_log字段名数据类型和长度是否主键空否说明emp_idChar(10)是Notnull员工编号nameVarchar(12)Notnull姓名genderChar(2)Notnull性别telVarchar(15)null电话idchar(18)Notnull身份证号码job_idTinyintNotnull职务编号job_lvlintNotnull职务级别hire_dateDatetimeNotnull入职日期quit_dateDatetimeNotnull离职日期截图显示:第一张表第二张表第三张表2.实体完整性的实现(用图形化方式或代码均可,请记录实现过程)设置三个表的主键。employee表:emp_idchar(10)primarykeyjob表:job_idtinyintprimarykeyemployee_log表:emp_idchar(10)primarykey3.参照完整性的实现(用图形化方式或代码均可,请记录实现过程)设置employee表和employee_log表的外键。foreignkey(job_id)referencesjob(job_id);4.用户定义完整性的实现(用图形化方式或代码均可,请记录实现过程)(1)employee表中gender字段的取值只能为(“男”或者“女”),id字段前17位必须是数字,第18位可以是数字或者是字母。genderchar(2)check(genderin('男','女'));idchar(18)check(idlike'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][(0-9)||(a-z)]')实现过程:gender约束Id约束实现过程验证过程:执行语句insertintoemployeevalues('2532','王红','女','','410923196810123253','002','5',getdate())insertintoemployeevalues('3532','孙越','男','','410923198810123253','003','5',getdate())insertintoemployeevalues('4532','李扬','男','','410923199010123253','004','5',getdate())insertintoemployeevalues('5532','杨飞','男','','410923199310123253','005','5',getdate())执行结果首先对gender约束进行验证,验证语句为:insertintoemployeevalues('5531','杨飞','好','null','410923199310123252','005','5',getdate())执行结果为对id约束进行验证,验证语句为:insertintoemployeevalues('5531','杨飞','男','null','41092319931012325x','005','5',getdate())执行结果为id约束错误验证,验证语句为:insertintoemployeevalues('5530','杨飞','男','null','41092319931012325xx','005','2',getdate())执行结果为id约束错误验证,验证语句为:insertintoemployeevalues('5530','杨飞','男','null','41092319931012325','005','2',getdate())执行结果为:(2)编写一个触发器,保证job表中min_lvl列的值小于等于max_lvl列的值。createtriggertri_jobonjobforinsert,updateasifnotexists(select*frominsertedwheremin_lv1=max_lv1)rollback触发器验证语句:insertintojobvalues('10','verygood',2,3)运行结果错误验证语句insertintojobvalues('007','公关部',10,1)执行结果实现过程(3)编写一个触发器,保证employee表中的job_lvl的值在jobs表的相应记录的min_lvl和max_lvl范围内。createtriggertri_employeeonemployeeforinsert,updateasifnotexists(select*frominsertedajoinjobbona.job_id=b.job_idwherea.job_lv1=min_lv1andjob_lv1=max_lv1)rollback验证触发器语句insertintoemployeevalues('1532','李明','男','123456789',410923197810123253,'001','5',getdate())insertintoemployeevalues('2532','王红','女','','410923196810123253','002','5',getdate())insertintoemployeevalues('3532','孙越','男','','410923198810123253','003','5',getdate())insertintoemployeevalues('4532','李扬','男','','410923199010123253','004','5',getdate())insertintoemployeevalues('5532','杨飞','男','','410923199310123253','005','5',getdate())运行结果:错误验证语句:insertintoemployeevalues('5541','杨飞','男','null','41092319931012322x','005','11',getdate())运行结果:实现过程(4)编写一个触发器,当从employee表中删除一条记录,将该记录添加到employee_log表中,同时quit_date字段值为系统当前日期。createtriggertri_emponemployeeafterdeleteasifexists(select*fromdeleted)insertintoemployee_logselect*,getdate()fromdeleted验证语句:deletefromemployeewhereemp_id='5532'deletefromemployeewhereemp_id='4532'deletefromemployeewhereemp_id='3532'执行结果:实现过程三、实验总结本次实验,练习了数据库基本表的创建,以及参照完整性约束。主键,外键的约束,触发器的练习。对于触发器有了进一步的了解。即一个事件的触发装置,当满足了触发事件的条件后进行相应的处理操作。