实验四数据完整性控制_第1页
实验四数据完整性控制_第2页
实验四数据完整性控制_第3页
实验四数据完整性控制_第4页
实验四数据完整性控制_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科实验报告 课程名称 数据库系统原理 实验项目 数据完整性控制 实验地点 4606 专业班级 学号 学生姓名 指导教师 2012 年 10 月 30 日 一一 目的与要求目的与要求 1 了解 SQL Serer 数据库系统中数据完整性控制的基本方法 2 熟练掌握常用 CREATE 或 ALTER 在创建或修改表时设置约束 3 了解触发器的机制和使用 4 验证数据库系统数据完整性控制 二二 实验设备与环境实验设备与环境 使用 SQL Server 数据库管理系统提供的 SSMS 和查询编辑器 三三 实验内容 实验记录及实验结果与分析实验内容 实验记录及实验结果与分析 结合 ST 数据库中的各个表 设置相关的约束 要求包括主键约束 外键约束 唯一约束 检查约束 非空约束 CONSTRAINT 子句等 掌握各 约束的定义方法 设置一个触发器 实现学生选课总学分的完整性控制 了解触发器的工 作机制 设计一些示例数据 验证完整性检查机制 实验步骤 1 使用 SQL 语句设置约束 使用 CREATE 或 ALTER 语句完成如下的操作 包括 设置各表的主键约束 设置相关表的外键 设置相关属性的非空约束 默认值约束 唯一约束 设置相关属性的 CHECK 约束 完整性约束命名子句 2 使用触发器 创建一个触发器 实现如下的完整性约束 当向 SC 表中插入一行数据时 自动将学分累加到总学分中 记录修改学分的操作 3 检查约束和触发器 分别向相关表插入若干条记录 检查你设置的完整性约束是否有效 1 插入若干条包含正确数据的记录 检查插入情况 2 分别针对设置的各个约束 插入违反约束的数据 检查操作能否进行 3 向 SC 表插入若干行数据 检查触发器能否实现其数据一致性功能 建立一个学生选课数据库 熟悉约束及触发器的使用方法 1 声明完整性约束 创建学生选课数据库 TEST 包括三个基本表 其中 Student 表保存学生 基 本信息 Course 表保存课程信息 SC 表保存学生选课信息 其结构如下 表 表 3 1 Student 表结构 列名称用途类型长度约束备注 Sno 学号字符 8 主键 Sname 姓名字符 8 非空 Ssex 性别字符 2 男 女 Sage 年龄整型 Sdept 所在系字符 20 Sclass 班级字符 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 表 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 AND Grade 0 AND Grade 100 2 检查完整性约束 通过修改数据库中的数据检查完整性约束条件的作用 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 约束 不能在对象 dbo 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 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 20100102 4 检查非空约束 下面的语句包含空值 检查运行结果 解释为什么 INSERT INTO Student Sno Sname Ssex 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 INTO 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 执行下面的语句检查外键约束的作用 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 表 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 Course SET Cno 10 WHERE Cname 数据库系统原理 UPDATE 语句与 REFERENCE 约束冲突 该冲突发生于数据库 TEST 表 dbo SC column Cno 3 触发器的定义及使用 1 定义一个触发器 实现有关学分的完整性约束 当向 SC 表插入一行选课记 录时 自动将该课程的学分累加到该学生的总学分中 CREATE TRIGGER tr INSERT ON SC FOR INSERT AS 声明变量 DECLARE sno char 8 DECLARE cridit int DECLARE cno char 4 提取插入的数据 SELECT 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 GO 2 定义一个触发器 实现对 SC 表的操作登记 当用户向 SC 表插入或修改时 记录该操作到数据库中 创建日志登记表 CREATE TABLE LOG TABLE username char 10 操作人员 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 执行插入操作 触发触发器 INSERT INTO SC VALUES 20100001 6 95 4 验证触发器是否触发 select from student select from LOG TABLE 四四 实验遇到的问题和解决方法实验遇到的问题和解决方法 1 本次试验又创建了一个新表 TEST 而且数据跟先前实验完全一致 好 在有实验二的基础 用时不长 建表时尝试在图形界面输入数据 SQL Server 又一次报错 原因不得而知 最后还是选择采用 SQL 语句添加数据 熟练之后 觉得在数据添加这块 SQL 语句相对来说简单迅速 2 约束和触发器的设置还是比

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论