分享
分享赚钱 收藏 举报 版权申诉 / 11

类型实验四 数据完整性控制.doc

  • 上传人:dcs1276
  • 文档编号:8101539
  • 上传时间:2019-06-08
  • 格式:DOC
  • 页数:11
  • 大小:485.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    实验四 数据完整性控制.doc
    资源描述:

    1、 本科实验报告课程名称: 数据库系统原理 实验项目: 数据完整性控制 实验地点: 4606 专业班级: 学号: 学生姓名: 指导教师: 2012 年 10 月 30 日一 目的与要求(1)了解 SQL Serer 数据库系统中数据完整性控制的基本方法(2)熟练掌握常用 CREATE 或 ALTER 在创建或修改表时设置约束(3)了解触发器的机制和使用(4)验证数据库系统数据完整性控制二 实验设备与环境使用 SQL Server 数据库管理系统提供的 SSMS 和查询编辑器。三 实验内容、实验记录及实验结果与分析 结合 ST 数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束

    2、、检查约束、非空约束、CONSTRAINT 子句等,掌握各约束的定义方法。 设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。 设计一些示例数据,验证完整性检查机制。实验步骤:1 使用 SQL 语句设置约束 使用 CREATE 或 ALTER 语句完成如下的操作,包括: 设置各表的主键约束 设置相关表的外键 设置相关属性的非空约束、默认值约束、唯一约束 设置相关属性的 CHECK 约束 完整性约束命名子句2 使用触发器创建一个触发器,实现如下的完整性约束: 当向 SC 表中插入一行数据时,自动将学分累加到总学分中。 记录修改学分的操作。 3 检查约束和触发器 分别向相关表插

    3、入若干条记录,检查你设置的完整性约束是否有效: 1) 插入若干条包含正确数据的记录,检查插入情况 2) 分别针对设置的各个约束,插入违反约束的数据,检查操作能否进行 3) 向 SC 表插入若干行数据,检查触发器能否实现其数据一致性功能。 建立一个学生选课数据库,熟悉约束及触发器的使用方法。1 声明完整性约束 创建学生选课数据库 TEST,包括三个基本表,其中 Student 表保存学生基本信息,Course 表保存课程信息,SC 表保存学生选课信息,其结构如下表: 表 3-1 Student 表结构列名称 用途 类型 长度 约束 备注Sno 学号 字符 8 主键Sname 姓名 字符 8 非空

    4、Ssex 性别 字符 2 (男,女)Sage 年龄 整型Sdept 所在系 字符 20Sclass 班级 字符 4 非空Stotal 总学分 整型1)创建基本表及约束(1)创建 Student 表CREATE TABLE Student(Sno CHAR(8) PRIMARY KEY,Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK( Ssex in (男,女), Sage SMALLINT, Sdept CHAR(20), Sclass CHAR(4) NOT NULL, Stotal smallint DEFAULT 0);(2)创建 Course 表

    5、CREATE TABLE Course (Cno CHAR(4) CONSTRAINT PK_Course PRIMARY KEY,Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT); (3)创建 SC 表 CREATE TABLE SC (Sno CHAR(8) FOREIGN KEY (Sno) REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT CONSTRAINT SC_CHECK CHECK(Grade 0 ANDGrade=0 AND Grade=100)2、检查完整性约束 通过修改

    6、数据库中的数据检查完整性约束条件的作用。1)检查主键约束(1)执行下面的语句修改 Student 表,观察语句能否正确运行,解释为什么?INSERT INTO Student VALUES(20100101,李斌,男,20,CS,1001,0) 正确运行。INSERT INTO Student VALUES(20100001,李斌,男,20,CS,1001,0) 违反了 PRIMARY KEY 约束,不能在对象dbo.Student 中插入重复键。UPDATE Student SET Sno=20100021 WHERE Sname = 张立 违反了 PRIMARY KEY 约束,不能在对象d

    7、bo.Student 中插入重复键。(2)执行下面的语句修改 SC 表,观察语句能否正确运行,解释为什么? INSERT INTO SC VALUES(20100001,1,78) 违反了 PRIMARY KEY 约束,不能在对象dbo.SC 中插入重复键。INSERT INTO SC VALUES(20100001,null,78) 不能将值 NULL 插入列Cno,表TEST.dbo.SC;列不允许有 Null 值。INSERT 失败。2)检查唯一约束 执行下面的语句修改 Course 表,观察语句能否正确运行,解释为什么?INSERT INTO Course VALUES(8,JAVA,

    8、7, 3) 正确运行。INSERT INTO Course VALUES(9,数据结构,7, 3) 违反了 UNIQUE KEY 约束,不能在对象 dbo.Course 中插入重复键。3)检查默认值、允许空值列 运行如下的语句:INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20100102,张盛,男,1008) 观察插入数据行的数值 SELECT * FROM Student WHere Sno=201001024)检查非空约束 下面的语句包含空值,检查运行结果,解释为什么? INSERT INTO Student(Sno,Sname,Ss

    9、ex,Sclass) VALUES(20100103,张盛,男,NULL) 不能将值 NULL 插入列Sclass,表TEST.dbo.Student;列不允许有 Null 值。INSERT 失败。INSERT INTO Student(Sno,Sname,Ssex) VALUES(20100104,张盛,男) 不能将值 NULL 插入列Sclass,表TEST.dbo.Student;列不允许有 Null 值。INSERT 失败。5)检查 CHECK 约束 执行下面的语句,解释其运行结果。 INSERT INTO SC VALUES(20100001,4,95) 正确运行。INSERT IN

    10、TO SC VALUES(20100001,4,102) 违反了 PRIMARY KEY 约束,不能在对象dbo.SC 中插入重复键。INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20100103,张盛,男,1008) 正确运行。INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES(20100104,张盛,1008) INSERT 语句与 CHECK 约束冲突。该冲突发生于数据库“TEST“,表“dbo.Student“, column Ssex。6)检查外键约束(1)执行下面的语句检查外键约束

    11、的作用 INSERT INTO SC VALUES(20100301,1,95) INSERT 语句与 FOREIGN KEY 约束冲突。该冲突发生于数据库“TEST“,表“dbo.Student“, column Sno。INSERT INTO SC VALUES(20100001,10,95) INSERT 语句与 FOREIGN KEY 约束冲突。该冲突发生于数据库“TEST“,表“dbo.Course“, column Cno。UPDATE SC SET Cno = 10 Where Cno=1 UPDATE 语句与 FOREIGN KEY 约束冲突。该冲突发生于数据库“TEST“,表

    12、“dbo.Course“, column Cno。UPDATE Course SET Cno = 10 Where Cno=3 UPDATE 语句与 REFERENCE 约束“FK_SC“冲突。该冲突发生于数据库“TEST“,表“dbo.SC“, column Cno。(2)执行下面的语句检查对被引用表的约束 DELETE Student WHERE Sno=20100021 正确运行。DELETE Student WHERE Sno=20100001 DELETE 语句与 REFERENCE 约束冲突。该冲突发生于数据库“TEST“,表“dbo.SC“, column Sno。UPDATE

    13、Course SET Cno = 10 WHERE Cname = 数据库系统原理 UPDATE 语句与 REFERENCE 约束冲突。该冲突发生于数据库“TEST“,表“dbo.SC“, column Cno。3 触发器的定义及使用 1)定义一个触发器,实现有关学分的完整性约束:当向 SC 表插入一行选课记录时,自动将该课程的学分累加到该学生的总学分中。CREATE TRIGGER tr_INSERT ON SCFOR INSERT AS -声明变量 DECLARE sno char(8) DECLARE cridit int DECLARE cno char(4) -提取插入的数据 SEL

    14、ECT sno=Sno,cno=Cno FROM inserted -提取学生的总学分 SELECT cridit = Ccredit FROM SC join Course ON (SC.Cno = Course.Cno) WHERE SC.Cno = cno-更新总学分 UPDATE Student SET Stotal = Stotal + cridit WHERE Sno = sno GO2)定义一个触发器,实现对 SC 表的操作登记:当用户向 SC 表插入或修改时,记录该操作到数据库中。创建日志登记表: CREATE TABLE LOG_TABLE(username char(10)

    15、, -操作人员 date datetime, -修改时间 Sno char(8) , -学生学号Cno char(4)); -课程号创建日志登记触发器: CREATE TRIGGER tr_UPDATE ON SC FOR INSERT,UPDATE AS DECLARE sno char(8) DECLARE cno char(4)DECLARE new smallint SELECT sno=Sno,cno=Cno FROM inserted INSERT INTO LOG_TABLE VALUES(CURRENT_USER,getdate(),Sno,Cno);GO 3)执行插入操作,触

    16、发触发器:INSERT INTO SC VALUES(20100001,6,95) 4)验证触发器是否触发 select * from student select * from LOG_TABLE四 实验遇到的问题和解决方法1. 本次试验又创建了一个新表 TEST,而且数据跟先前实验完全一致。好在有实验二的基础,用时不长。建表时尝试在图形界面输入数据,SQL Server又一次报错。原因不得而知,最后还是选择采用 SQL 语句添加数据。熟练之后觉得在数据添加这块,SQL 语句相对来说简单迅速。2. 约束和触发器的设置还是比较“隐秘” ,不像查询语句那般明显,只是在具体的实例中,约束和触发器才发挥着作用。通过几个添加或删除的例子,发现并熟悉其机制。五 实验心得实验中通过实例的练习,了解了约束和触发器的工作机制。对数据库系统数据完整性控制的验证进行的比较顺利。相比刚开始实验时候,已经有了很大进步和突破。在学习理论知识过程中,抽象的概念和 SQL 语句很难从形式上得出一个很明确的认识。实验的实践则是对此最好的解决之道。特别是本专业,更需要通过大量的编程实践,来融会贯通,将理论概念转化为实践技能。

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:实验四 数据完整性控制.doc
    链接地址:https://www.docduoduo.com/p-8101539.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开