一、实验目的:

  1. 熟悉通过SQL对数据进行完整性控制;

  2. 练习实际应用中完整性控制方法;

  3. 练习触发器的创建和使用。

二、实验内容 :

基于某员工管理数据库,使用触发器实现数据完整性控制,完成以下功能:

  1. 创建触发器实现员工入职时,记录员工初始部门和工资信息到变动历史表中;

  2. 创建触发器实现员工信息变更时,记录员工的部门或工资变动情况到变动历史表中;

  3. 创建触发器实现员工离职时,自动备份离职前的工资到变动历史表中。

三、题目:

某员工信息管理系统中,当员工入职、离职、调动部门或工资变动时,需将变动信息记入变动历史中,请使用触发器完成此功能。变动历史包含部门变动历史和工资变动历史,分别使用部门变动历史表和工资变动历史表记录对应信息。

参考表结构如下:

  1. 员工表:employee(eid,ename,dept,salary,uptime,stutus)
    其中eid为员工编号,ename为员工姓名,dept为所在部门,salary为工资,uptime为修改时间,stutus为状态(1表示在职,0表示离职)。

  2. 部门变动历史表:dept_history(dhid, eid, old, new, uptime)
    其中dhid为部门变动编号(自动增长,无需赋值),eid为员工编号,old为调动前的部门(新入职的员工old值记为NULL),new为调动后的部门,uptime为修改时间。

  3. 工资变动历史表:sal_history(shid, eid, old, new, uptime)
    其中shid为工资变动编号(自动增长,无需赋值),eid为员工编号,old为变动前的工资,new为变动后的工资,uptime为修改时间。

触发器要求如下:

  1. 当新职工入职时,员工信息表将插入1条数据。同时,触发器在部门变动历史中增加1条记录,其中old值为null;在工资变动历史中增加1条记录,其中old值为0。

  2. 当新职工部门或工资发生变化时,触发器执行以下操作。若部门发生变动,则在变动历史中增加1条记录;若工资发生变动,则在工资变动历史中增加1条记录。

四、实验过程:

创建数据库:

CREATE DATABASE emp;-- 创建员工表
CREATE TABLE employee (
eid CHAR (6) PRIMARY KEY,
ename VARCHAR (10) UNIQUE,
dept VARCHAR (10) UNIQUE,
salary INT,
uptime datetime,
status char(1)
) --插入数据
INSERT INTO employee VALUES( '1001', 'zs', '软开', 3000, CURRENT_TIMESTAMP, '1' );-- 创建部门变动历史表
CREATE TABLE dept_history (dhid INT PRIMARY KEY AUTO_INCREMENT,eid CHAR (6),old VARCHAR (10),new VARCHAR (10),uptime datetime
) -- 创建工资变动历史表
CREATE TABLE sal_history (
shid INT PRIMARY KEY AUTO_INCREMENT,
eid CHAR (6),
old INT,
new INT,
uptime datetime
)

问题一:当新职工入职时,员工信息表将插入1条数据。同时,触发器在部门变动历史中增加1条记录,其中olddept值为null;在工资变动历史中增加1条记录,其中oldsal值为0。

创建insert触发器:

DELIMITER $
CREATE TRIGGER emp_insert
AFTER INSERT ON employee
FOR EACH ROW
BEGIN
INSERT INTO dept_history ( eid, old, new, uptime )VALUES( new.eid, NULL, new.dept, new.uptime );INSERT INTO sal_history ( eid, old, new, uptime )VALUES( new.eid, 0, new.salary, new.uptime );
END$
DELIMITER ;

问题二:当新职工部门或工资发生变化时,触发器执行以下操作。若部门发生变动,则在变动历史中增加1条记录;若工资发生变动,则在工资变动历史中增加1条记录。

创建update触发器:

DELIMITER $
CREATE TRIGGER emp_update
AFTER UPDATE ON employee
FOR EACH ROW
BEGINIF(old.dept != new.dept) THENINSERT INTO dept_history ( eid, old, new, uptime )VALUES(new.eid, old.dept, new.dept, new.uptime );END IF;IF(old.salary != new.salary) THENINSERT INTO sal_history ( eid, old, new, uptime )VALUES(new.eid, old.salary, new.salary, new.uptime );   END IF;
END$
DELIMITER ;

五、实验小结:

触发器触发时间分为 before和 after,顾名思义,before代表触发器里面的命令在修改数据之前执行,after代表触发器里面的命令在修改数据命令之后执行。

数据库系统(四)——触发器相关推荐

  1. 数电实验四-触发器(Multisim和Basys3)

    特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一.实验目的 详见报告 二.实验仪器 1.数字电路实验箱 2.器材 三.实验内容详解 1.基本RS触发器逻辑功能的测试 ...

  2. SQL Server 触发器创建、删除、修改、查看示例

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...

  3. sql 触发器的常用语句(转)

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...

  4. 触发器的创建、修改和删除

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束.          二﹕ SQL Se ...

  5. zabbix触发器表达式

    zabbix触发器表达式 触发器使用逻辑表达式来评估通过item获取的数据是处于哪种状态, 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<serve ...

  6. SQL Server触发器创建、删除、修改、查看示例步骤

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...

  7. zabbix触发器表达式详解

    概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<function>(<para ...

  8. SQLServer触发器的使用

    基本语法 创建: create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, upd ...

  9. Salesforce触发器面试题

    您可以在触发器中解释执行顺序吗? 以下是Salesforce在DML事件之前执行的事件的执行顺序. 记录是从数据库加载的,或者在使用upset语句的情况下被初始化. 新记录的字段值将覆盖旧值,**现在 ...

  10. 在wps里面怎么设置触发器_WPS演示触发器的使用(一)

    第九讲:课件特效(四)--触发器的使用(一) WPS演示不仅能制作简单的课件动画,还可以制作比较复杂的动画.本节课我就给大家介绍如何在WPS演示中制作判断题智能交互课件. 要在WPS演示中制作判断题交 ...

最新文章

  1. 网络传输模型(概念)
  2. UDA机器学习基础—交叉验证
  3. Java设计模式学习总结(6)——创建型模式之原型模式
  4. JDBC学习(六、事务处理操作)
  5. 贝莱德集团CEO劳伦斯·芬克: 伟大的公司,都有一个长期战略
  6. jrtplib linux编译,linux下编译jrtplib、jthreadlib
  7. uc/os-II的内存改进与实现TLSF算法的详解,移植实现(二)
  8. 2022年下半年软考考哪个科目?看完就懂了
  9. 徐姗姗 20190905-3 命令行和控制台编程
  10. 忠告7 成功 = 能力 X 努力 X 态度
  11. 病案系统实施-基本知识-持续更新
  12. Android PC同步软件 类似 apple 的 itunes
  13. 图片水印如何去除,怎样处理带水印的图片?
  14. 阿里云服务器Ubuntu16.04配置图形界面并远程桌面连接
  15. laragon+laravel搭建PHP项目
  16. Yapi测试插件--cross-request
  17. 腾讯云服务器域名解析教程 ?
  18. c++ (Qt MinGW32) 调用 python脚本
  19. java中的string是什么意思_java中String[][] 是什么东西?string[]又是什么东西?
  20. linux如何关闭端口

热门文章

  1. python高斯分布训练_Python画图高斯分布的示例
  2. php 爬虫 类,php爬虫原型
  3. mysql 中函数如何转存_MySQL函数转储存(当前月数据同步)
  4. 股票系列,动态规划,加油,九月太浪了,十月不许浪
  5. localdatetime获得时间搓_得用户者得天下,一禅小和尚×往事若茶如何获得消费者认同...
  6. 一直记不住window下面的盘符切换
  7. Apache开启Gzip压缩技术,加快网页访问速度
  8. 美国密西西比州立大学招收机器学习、数据挖掘方向全奖博士生
  9. 让聊天机器人同你聊得更带劲 - 对话策略学习 | 论文访谈间 #21
  10. [PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现