实验五  数据库完整性

【实验目的】

1、掌握实体完整性约束、参照完整性约束

2、灵活应用自定义完整性约束

3、了解触发器在自定义完整性中的应用

【实验内容】

一、定义一个教师表Teacher(Tno,TName,TSex,TAge,TSal,TJob,TDept)
要求:
    1、性别只能是‘男’或‘女’
    2、Tno为主码,名字不能为空,且不能重复。
    3、年龄在18在60岁之间
    4、教授工资最低为5000(触发器完成)
    5、所在系Tdept,为外码,参照于DEPT表(注:DEPT表需要预先定义,当DEPT表删除元组时,相对应Teacher元组拒绝删除;修改时,相对应Teacher元组同时修改)。

二、定义记录表Record(RNo,TNo,ROldSal,RNewSal,RUser,RTime)
要求:
    1、RNo从1开始,每次加1为。主码
    2、TNo为外码,参照Teacher表。

     第一题和第二题参考:

     use sc --打开sc数据库 go/*-------------创建 系表-----------------------------*/ create table Dept (TDept char(10) primary key); go/*-------------创建 教师表---------------------------*/ create table Teacher (TNo char(10) primary key, TName char(10) not null, TSex char(2)check(TSex in('男','女')), TAge smallint check(TAge>=18 and TAge<=60), TSal numeric(7,2), TJob varchar(10), TDept char(10), foreign key (TDept) references Dept(TDept)on delete no action on update cascade); go /*-------------创建 记录表---------------------------*/ create table Record (RNo int identity (1,1) primary key, TNo char(10) references Teacher(TNo), ROldSal numeric(7,2), RNewSal numeric(7,2),RUser char(10), RTime Datetime); go /*-----定义触发器 教授工资不低于5000-------------------*/ create trigger Teacher_JiaoShou_MINSal on Teacher for Insert,Update as set Nocount off /*---------定义变量----------------------------------*/ declare @TNo char(10),@NewSal numeric(7,2),@Tjob char(10) begin/*---------获得变量值--------------------------------*/select @TNo=TNo,@NewSal=TSal,@Tjob=Tjob from inserted /*---------判断是否是教授,且工资小于5000---------------*/if (((@NewSal-5000)<0) and (@Tjob='教授'))begin/*---------修改该员工(教授Tno)表-------------------*/update Teacher set Tsal=5000where Tno=@Tnoend end go

三、定义触发器与触发器的执行
    1、定义触发器Insert_Teacher,当插入Teacher一行元组时,会将该元组信息如:教师编号TNo,工资等信息,自动插入到表Record中(ROldSal为0)。

参考代码:

/*-----插入Teacher触发器-----------------*/ create trigger Insert_Teacher on Teacher for Insert as set Nocount off /*---------定义变量----------------------*/ declare @TNo char(10),@RNewSal numeric(7,2) begin/*---------获得变量值----------------------*/select @TNo=TNo,@RNewSal=TSal from inserted /*---------插入要记录的数据到Record表----------------------*/insert into Record(TNo,ROldSal,RNewSal,RUser,RTime) values(@TNo,0,@RNewSal,current_user,current_timestamp) end

测试数据

insert into dept values('信息工程系') insert into teacher values ('2008001','wang','男',34,2000,'讲师','信息工程系') select * from teacher

2、定义触发器Update_Teacher,每当修改Teacher数据,且工资发生变动时,会自动记录工资变动情况到Record表。

参考代码:

/*-----更新Teacher触发器-----------------*/ create trigger Update_Teacher on Teacher for update as set Nocount off /*---------定义变量----------------------*/ declare @TNo char(10),@ROldSal numeric(7,2),@RNewSal numeric(7,2)begin/*---------获得变量值----------------------*/select @TNo=TNo,@ROldSal=TSalfrom deleted select @TNo=TNo,@RNewSal=TSal from inserted /*---------插入要记录的数据到Record表----------------------*/insert into Record(TNo,ROldSal,RNewSal,RUser,RTime) values(@TNo,@ROldSal,@RNewSal,current_user,current_timestamp) end

测试代码:

update teacher set tsal=3000 where tno='2008001'select * from record

3、定义触发器Delete_Teacher,当删除Teacher数据时,会自动记录删除数据情况到Delete_teacher表。即记录教师所有信息和用户及删除时间。(自己完成)

4、完成以上触发器的测试。

说明:

1)能够触发Insert_Teacher触发器的,有对Teacher表进行Insert操作和Update操作。

2)能够触发Delete_Teacher触发器的,有对Teacher表进行Delete操作和Update操作。

3)能够触发Update_Teacher触发器的,只有有对Teacher表进行Update操作。

【课外实验】

一、建立如下关系表

工程表(工程号,工程名,开工日期,竣工日期,状态,城市,项目经理号)

职工表(职工号,姓名,年龄,籍贯,职称,基本工资)

岗位表(岗位号,岗位名)

工资表(序号,职工号,月份,绩效工资,奖金)

要求:1、籍贯只记城市。

2、正确确定四个表的主码

3、通过外码,正确把握关系间的联系

4、工程与职工具有多对多的联系,建立一个工程_职工表(工程号,职工号,岗位号,入职时间,状态)

5、工程表的状态有两种状态(0:未完工,1:已完工)

工程_职工表的状态有两种(0:在职,2:已离职)

6、工资表的月份只能取1-12,奖金只能取100的倍数

7、职工表的年龄取值范围是18-60;职称取值为:初级、中级、高级;要求所有人员基本工资不低于800,高级人员的基本工资不低于4500.

二、创建视图工资视图(序号,职工号,月份,基本工资,绩效工资,奖金,五险一金,应发,个人所得税,实发)

三、是否能删除工程表的工程

数据库概论(实验五)数据库完整性相关推荐

  1. 实验五 数据库完整性(详细解释+错误修正版)

    /* 实验五  数据库完整性(详细解释+错误修正版) [实验目的] 1.掌握实体完整性约束.参照完整性约束 2.灵活应用自定义完整性约束 3.了解触发器在自定义完整性中的应用 [实验内容] 一.定义一 ...

  2. 查询计算机专业及选修了英语的学生,实验五 数据库综合查询(学生)

    实验五 数据库综合查询 一.实验目的 1. 掌握SELECT语句的基本语法和查询条件表示方法: 2. 掌握查询条件种类和表示方法: 3. 掌握连接查询的表示及使用: 4. 掌握嵌套查询的表示及使用: ...

  3. 实验五——数据库设计实验

    实验五--数据库设计实验 一.实验题目 二. 实验内容和要求 三.实验步骤 1.分析问题 2.概念结构设计 3.逻辑结构设计 四.实验心得体会 一.实验题目 数据库设计实验 二. 实验内容和要求 掌握 ...

  4. MySql实验嵌套查询_实验五 数据库的嵌套查询实验

    实验五数据库的嵌套查询实验 本实验需要2学时. 一.实验目的 使学生进一步掌握SQL Server或oracle的企业管理器的使用方法,加深SQL 语言的嵌套查询语句的理解. 二.实验内容 在SQL ...

  5. 数据库原理实验三 数据库综合设计实验 实验报告

    实验三 数据库系统设计综合实验 1.实验目的通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统. 2.实验要求熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的 ...

  6. 实验五 数据库完整性技术

    [实验目的] 1.掌握完整性的概念: 2.熟悉SQL SERVER 的完整性技术. 3.了解SQL SERVER 的违反完整性处理措施. [实验性质] 综合性实验 [实验导读] 1.完整性概述 数据库 ...

  7. 实验五 数据库完整性

    [实验目的] 1.掌握实体完整性约束.参照完整性约束 2.灵活应用自定义完整性约束 3.了解触发器在自定义完整性中的应用 [实验内容] 一.定义一个教师表Teacher(Tno,TName,TSex, ...

  8. 数据库 ----- 实验五:题目:实验五 数据库设计与数据库编程

    [实验目的和要求] 1.理解和掌握数据库设计的方法和主要步骤: 2.熟练掌握概念结构的建立方法和常用表达工具(E-R 图): 3.熟练掌握概念结构到逻辑结构的转换原则: 3.掌握SQL 流程控制语句. ...

  9. 数据库原理实验五——触发器与存储过程(函数)

    实验目的 熟练掌握存储过程/函数的创建和执行方法. 熟练掌握触发器的创建和执行方法. 实验内容 针对SPJ_MNG数据库,创建并执行如下存储过程.(共计40分) (1) 创建一个没有参数的存储过程-j ...

最新文章

  1. windows10环境运用SSH和SwitchySharp自由翱翔
  2. Vue——整合Katex
  3. 如何使用sdkmanager命令行接受SDK package的license
  4. 怎样从frm ibd恢复mysql_怎样从frm,ibd恢复MYSQL
  5. 微软认知服务开发实践(2) - 计算机视觉
  6. 产品创新及内容多元化 推动腾讯音乐第一季度财务和运营表现强劲
  7. 使用printf函数输出其ascii。_输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。...
  8. 谷歌跨界医学新动作:基因突变定位模型又更!新!了!
  9. db2 删除索引_程序员必须了解的知识点——你搞懂mysql索引机制了吗?
  10. Tomcat access log配置
  11. handsome主题魔改
  12. 精品软件试用及分享 屏幕录像专家注册版 附下载地址
  13. angular 架构
  14. XP系统无法访问\\192.168.1.104无法访问。你可能没有权限使用网络资源。与这台服务器的管理员联系以查明你是否有访问权限
  15. php画五角星,H5怎样用绘制五角星
  16. python函数ppt_如何用 Python 让你的PPT数据动起来
  17. 两个摄像头合成一路_两个摄像头怎样用一个显示屏
  18. 京东区块链(智臻链):1. 应用场景
  19. factorial of n
  20. 最长递增子序列(信封嵌套问题)

热门文章

  1. C++ RTTI详解
  2. 论文数据分析-4(论文种类分类)
  3. ubuntu输入法的设置
  4. XWifiMouse早期写的一个Android鼠标App
  5. mysql储存过程是什么意思_数据库原理mysql储存过程
  6. 华为q1设置虚拟服务器,华为Q1路由器上网设置方法【图文】
  7. C++>继承,继承方式及其比较,子类和父类对象指针,派生类的默认成员函数,虚继承,继承与友元,继承与静态成员
  8. Partition算法
  9. C语言输人两个正整数m和n,求其最大公约数和最小公倍数
  10. 盘点几个linux中有趣的游戏 。