数据库系统(四)——触发器
一、实验目的:
熟悉通过SQL对数据进行完整性控制;
练习实际应用中完整性控制方法;
练习触发器的创建和使用。
二、实验内容 :
基于某员工管理数据库,使用触发器实现数据完整性控制,完成以下功能:
创建触发器实现员工入职时,记录员工初始部门和工资信息到变动历史表中;
创建触发器实现员工信息变更时,记录员工的部门或工资变动情况到变动历史表中;
创建触发器实现员工离职时,自动备份离职前的工资到变动历史表中。
三、题目:
某员工信息管理系统中,当员工入职、离职、调动部门或工资变动时,需将变动信息记入变动历史中,请使用触发器完成此功能。变动历史包含部门变动历史和工资变动历史,分别使用部门变动历史表和工资变动历史表记录对应信息。
参考表结构如下:
员工表:employee(eid,ename,dept,salary,uptime,stutus)
其中eid为员工编号,ename为员工姓名,dept为所在部门,salary为工资,uptime为修改时间,stutus为状态(1表示在职,0表示离职)。部门变动历史表:dept_history(dhid, eid, old, new, uptime)
其中dhid为部门变动编号(自动增长,无需赋值),eid为员工编号,old为调动前的部门(新入职的员工old值记为NULL),new为调动后的部门,uptime为修改时间。工资变动历史表:sal_history(shid, eid, old, new, uptime)
其中shid为工资变动编号(自动增长,无需赋值),eid为员工编号,old为变动前的工资,new为变动后的工资,uptime为修改时间。
触发器要求如下:
当新职工入职时,员工信息表将插入1条数据。同时,触发器在部门变动历史中增加1条记录,其中old值为null;在工资变动历史中增加1条记录,其中old值为0。
当新职工部门或工资发生变化时,触发器执行以下操作。若部门发生变动,则在变动历史中增加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代表触发器里面的命令在修改数据命令之后执行。
数据库系统(四)——触发器相关推荐
- 数电实验四-触发器(Multisim和Basys3)
特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一.实验目的 详见报告 二.实验仪器 1.数字电路实验箱 2.器材 三.实验内容详解 1.基本RS触发器逻辑功能的测试 ...
- SQL Server 触发器创建、删除、修改、查看示例
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- sql 触发器的常用语句(转)
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- 触发器的创建、修改和删除
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Se ...
- zabbix触发器表达式
zabbix触发器表达式 触发器使用逻辑表达式来评估通过item获取的数据是处于哪种状态, 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<serve ...
- SQL Server触发器创建、删除、修改、查看示例步骤
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- zabbix触发器表达式详解
概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<function>(<para ...
- SQLServer触发器的使用
基本语法 创建: create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, upd ...
- Salesforce触发器面试题
您可以在触发器中解释执行顺序吗? 以下是Salesforce在DML事件之前执行的事件的执行顺序. 记录是从数据库加载的,或者在使用upset语句的情况下被初始化. 新记录的字段值将覆盖旧值,**现在 ...
- 在wps里面怎么设置触发器_WPS演示触发器的使用(一)
第九讲:课件特效(四)--触发器的使用(一) WPS演示不仅能制作简单的课件动画,还可以制作比较复杂的动画.本节课我就给大家介绍如何在WPS演示中制作判断题智能交互课件. 要在WPS演示中制作判断题交 ...
最新文章
- 网络传输模型(概念)
- UDA机器学习基础—交叉验证
- Java设计模式学习总结(6)——创建型模式之原型模式
- JDBC学习(六、事务处理操作)
- 贝莱德集团CEO劳伦斯·芬克: 伟大的公司,都有一个长期战略
- jrtplib linux编译,linux下编译jrtplib、jthreadlib
- uc/os-II的内存改进与实现TLSF算法的详解,移植实现(二)
- 2022年下半年软考考哪个科目?看完就懂了
- 徐姗姗 20190905-3 命令行和控制台编程
- 忠告7 成功 = 能力 X 努力 X 态度
- 病案系统实施-基本知识-持续更新
- Android PC同步软件 类似 apple 的 itunes
- 图片水印如何去除,怎样处理带水印的图片?
- 阿里云服务器Ubuntu16.04配置图形界面并远程桌面连接
- laragon+laravel搭建PHP项目
- Yapi测试插件--cross-request
- 腾讯云服务器域名解析教程 ?
- c++ (Qt MinGW32) 调用 python脚本
- java中的string是什么意思_java中String[][] 是什么东西?string[]又是什么东西?
- linux如何关闭端口
热门文章
- python高斯分布训练_Python画图高斯分布的示例
- php 爬虫 类,php爬虫原型
- mysql 中函数如何转存_MySQL函数转储存(当前月数据同步)
- 股票系列,动态规划,加油,九月太浪了,十月不许浪
- localdatetime获得时间搓_得用户者得天下,一禅小和尚×往事若茶如何获得消费者认同...
- 一直记不住window下面的盘符切换
- Apache开启Gzip压缩技术,加快网页访问速度
- 美国密西西比州立大学招收机器学习、数据挖掘方向全奖博士生
- 让聊天机器人同你聊得更带劲 - 对话策略学习 | 论文访谈间 #21
- [PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现