《2022年数据库原理与应用实验报告》由会员分享,可在线阅读,更多相关《2022年数据库原理与应用实验报告(7页珍藏版)》请在金锄头文库上搜索。
1、数据库理论与应用实验指导实验序号: 05 实验项目名称: 数据完整性控制学号姓名专业、班18 大数据 1 班实验地点指导教师实验时间2020/5/6 一、实验目的及要求熟悉通过 SQL语言对数据库进行完整性控制操作, 包括 3 类完整性、check 短语、 constraint子句、触发器。因为完整性约束绝大部分是在定义表结构的时候完成的,因此可能需要多次定义表,如果表名发生重复,可以先将旧表删除再重建。二、实验设平台利用实验 1 所安装的 RDBMS 及其交互查询工具来操作SQL语言三、实验内容和要求1.实体完整性- 定义表的主码关系模型的实体完整性在CREATE TABLE 中用 PRIM
2、ARY KEY 定义。定义主码的方法分为定义为列级约束条件和定义为表级约束条件。1 ) 定 义 表student , 并 将 其 中 的sno属 性 定 义 为 主 码 。 Student 表 由( SNO,SNAME,SSEX,SAGE,SDEPT ) 等 列 组 成 , 各 列 的 类 型 分 别 是 (CHAR(7), CHAR(8),CHAR(2),SMALLINT,CHAR(20)。2)定义表 course ,并将其中的 cno 属性定义为主码。 course表由( CNO,CNAME )等列组成,各列的类型分别是 (CHAR(7), CHAR(8) 。3)定义表 SC,并将其中的属
3、性 sno,cno定义为主码名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 2.参照完整性关 系 模 型 的 参 照 完 整 性 在 CREATE TABLE中 用FOREIGN KEY定 义 , 并 用REFERENCES来指明外码参照的是哪些表的主码。1) 定义表 sc,其中 sno参照表 student的主码 sno, cno参照表 course的主码 cno. Sc表有(SNO,CNO,GRADE) 等属性,类型分别是
4、(CHAR(7),CHAR(7),SMALLINT). 3. 用户定义完整性用户定义属性上的约束条件1) 列值非空。在定义sc表时, sno,cno和 grade属性都不允许取空值2) 列值唯一。建立部门表DEPT,要求部门名称 Dname 取值唯一,部门编号Deptno属性为主码DEPT 表有(DEPTNO, DNAME, LOCATION) 三个属性。3) CHECK 短语指定列值应该满足的条件。定义表student ,属性 ssex的值只允许取“男”或“女” ;定义表 sc,属性 GRADE 的值在 0100 之间Student表和 sc表的其他信息参加上面的例子名师资料总结 - - -
5、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 4) 用户定义的元组上约束条件CHECK 短语不仅能够定义属性上的约束条件,而且还能允许用户定义元组级的约束条件。定义表 student,要求当学生性别为男时, 其名字不能以 Ms.打头。其他信息如之前的例子。4CONSTRAINT 完整性约束命名子句在定义表时利用约束命名子句对完整性约束条件命名,能够灵活地增加或删除一个完整性约束条件。1) 定义表 student ,要求学号在9000099999之间,
6、姓名不能取空值,年龄小于30,性别只能是“男”或“女” 。要求全部用约束命名子句实现,主码约束也要用约束命名子句实现,列信息见之前例子名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 2) 修改表 student中的完整性约束,去掉对性别的限制,并将对年龄的限制由小于30 改为小于 40。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
7、- - - 第 4 页,共 7 页 - - - - - - - - - 5触发器触发器可以看成是一类特殊的存储过程,在满足某个特定条件时自动触发执行,是提高数据库服务器性能的有力工具。触发器分为三类,更新触发器、插入触发器和删除触发器。能够定义触发器的用户有表的所有者、系统管理员、 拥有创建触发器权限且拥有对操作对象相应操作权限的用户。1) 定义表 TAB ,并在其上定义触发器TR1 ,在对 TAB的插入和更新前检查,如果插入或更新的值在 1001000之间,将值置为 50;如果值大于 1000的话,则给出新值不允许大于1000 的提示。RAISE_APPLICATION_ERROR(-201
8、23,Invald product code TRUE);并进行检测。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 2) 删除触发器 TR1 ,并进行检测,查看是否还有上述限制。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 四、思考写触发器函数的时候,若是将(100,1000)这个判断条件写在第一个,会导致不进行大于 1000 的判断?是可以插入1000 这个数据的,但是将大于1000 这个判断写在第一个,就正常了五、教师评语签名:日期:成绩名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -