【数据库】存储过程、函数、触发器

按照要求实现员工管理数据库系统中的指定操作:
1、创建一个数据库 staff,并在数据库中创建以下四张表:

员工表
employee(员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark)

部门表
dept(部门编号id,部门名称deptName,部门经理编号managerId)

工资表
payroll(工资编号id,员工编号empId,基本工资baseSalary,应发工资actualSalary,奖金bonus,缺勤扣钱deductMoney,薪资发放日期grantDate)

请假表
ask_leave(请假编号id,员工编号empId,请假原因leaveReason,请假开始时间beginDate,请假结束时间endDate,提交时间submitDate,审核人编号auditId(该列有触发器维护),申请状态status,审核意见auditOpinion)

基础数据自己填写。
2、编写存储过程实现插入员工表:参数为:员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark。
3、利用存储过程在员工表中插入5条记录。 
4、创建触发器,当插入或修改工资表payroll时,应发工资自动为“基本工资+奖金-缺勤扣钱.
5、在员工表中依据姓名userName建立索引。索引名为:index_userName。
6、建立员工部门工资视图(包含员工名称,部门名称,基本工资,应发工资,奖金,缺勤扣钱)视图名称:v_employee_dept_payroll。
7、利用触发器实现插入请假信息时,审核人编号自动填入请假人所在部门的部门经理编号。触发器名称为:insert_ask_leave。
8、备份数据库的结构和数据,导出SQL文件名为:staff_sjk.sql。
9、将staff_sjk.sql上传至服务器。

1.创建表

CREATE DATABASE staff;
USE staff;
CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(255),deptId INT,LEVEL INT,avatar BLOB,remark TEXT,PRIMARY KEY(id)
);CREATE TABLE dept(id INT NOT NULL AUTO_INCREMENT,deptName VARCHAR(255),manageId INT,remark VARCHAR(255),PRIMARY KEY(id)
);CREATE TABLE payroll(id INT NOT NULL AUTO_INCREMENT,empId INT,baseSalary DOUBLE,actualSalary DOUBLE,bonus DOUBLE,deductMoney DOUBLE,grantDate DATE,PRIMARY KEY(id)
);CREATE TABLE ask_leave(id INT NOT NULL AUTO_INCREMENT,empId INT,leaveReason TEXT,beginDate DATE,endDate DATE,submitDate DATE,auditId INT,STATUS INT,auditOpinion TEXT,PRIMARY KEY(id)
);

2.编写存储过程实现插入员工表:参数为:

员工编号idint
姓名userNamevarchar(225)
出生日期birthDatedate
身份证号idCardvarchar(225)
登录名称loginNamevarchar(225)
登录密码passwordvarchar(225)
手机号mobilevarchar(225)
电子邮件emailvarchar(225)
部门编号deptIdint
员工级别levelint
员工头像avatarblob
备注remarktext

存储过程名称为:insert_employee

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_employee`(IN `id` int,IN `username` varchar(225),IN `birthDate` date,IN `idCard` varchar(225),IN `loginName` varchar(225),IN `password` varchar(225),IN `mobile` varchar(225),IN `email` varchar(225),IN `deptId` int,IN `level` int,IN `avatar` blob,IN `remark` text
)
BEGINDECLARE cnt INT;SELECT COUNT(*) INTO cnt FROM employee WHERE employee.id = id;IF cnt = 0 THEN INSERT INTO employee(`id`,`username`,`birthDate`,`idCard`,`loginName`,`password`,`mobile`,`email`,`deptId`,`level`,`avatar`,`remark` )VALUES(`id`,`username`,`birthDate`,`idCard`,`loginName`,`password`,`mobile`,`email`,`deptId`,`level`,`avatar`,`remark`);END IF;
END

3.利用存储过程在员工表中插入5条记录.

call insert_employee(1,'小红','2002-03-14','411423200203141510','xiaohong','123','15238790678','1625376859@qq.com',3,1,NULL,'新员工');
call insert_employee(2,'小橙','2002-02-14','411423200203241511','xiaocheng','123','15238790677','1625376858@qq.com',2,2,NULL,'新员工');
call insert_employee(3,'小黄','2002-01-14','411423200203341512','xiaohuang','123','15238790676','1625376857@qq.com',1,4,NULL,'老员工');
call insert_employee(4,'小绿','2001-12-14','411423200112141513','xiaolv','123','15238790675','1625376856@qq.com',2,5,NULL,'老员工');
call insert_employee(5,'小青','2001-11-14','411423200111141514','xiaoqing','123','15238790674','1625376855@qq.com',3,6,NULL,'老员工');

4.创建触发器,当插入或修改工资表payroll时,应发工资自动为“基本工资+奖金-缺勤扣钱”。
插入

CREATE TRIGGER `insert_payroll` BEFORE INSERT ON `payroll` FOR EACH ROW SET new.actualSalary = new.baseSalary + new.bonus - new.deductMoney;

更新

CREATE DEFINER = `root`@`localhost` TRIGGER `update_payroll` BEFORE UPDATE ON `payroll` FOR EACH ROW SET new.actualSalary = new.baseSalary + new.bonus - new.deductMoney;

5.在员工表中依据姓名userName建立索引。索引名为:index_userName。

CREATE INDEX index_userName ON employee(username);

6.建立员工部门工资视图(包含员工名称,部门名称,基本工资,应发工资,奖金,缺勤扣钱)视图名称:v_employee_dept_payroll。

CREATE VIEW v_employee_dept_payroll AS
SELECT username AS 姓名,deptName AS 部门名称,baseSalary AS 基本工资,actualSalary AS 应发工资,bonus AS 奖金,deductMoney AS 缺勤扣钱
FROM employee,dept,payroll
WHERE employee.id = payroll.empId AND employee.deptId = dept.id;

7.利用触发器实现插入请假信息时,审核人编号自动填入请假人所在部门的部门经理编号。触发器名称为:insert_ask_leave。

CREATE DEFINER = `root`@`localhost` TRIGGER `insert_ask_leave` BEFORE INSERT ON `ask_leave` FOR EACH ROW SET new.auditId = (SELECT manageId FROM employee,dept WHERE employee.deptid = dept.id AND new.empid = employee.id);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口性能测试 —— Jmeter并发与持续性压测!

接口压测的方式: 1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数 2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种…

汽车电子零部件(13):BMS电池管理系统

前言: 电池管理系统(BMS)确保电动汽车(EV)的能量分配安全高效。目前流行电动汽车中使用的有四种主要BMS架构,BMS与充电基础设施互为集成关系。BMS主要管理 的是电池组,电池组由很多电芯组成,比如下图是H/EV电池组的主要部件,显示了电池、连接、控制电路和包装的总体布…

软件技术主要学什么课程

软件技术专业主要学习的课程和内容有编程语言、数据结构与算法、数据库技术等,以下是上大学网( www.sdaxue.com)整理的软件技术主要学什么课程,供大家参考! 编程语言:掌握一种或多种编程语言,如C#、Java、Python、C等&…

PyCharm安装教程(超详细图文教程)

一、下载和安装 1.进入PyCharm官方下载,官网下载地址: https://www.jetbrains.com/pycharm/download/ 专业版安装插件放网盘了,网盘下载即可:itcxy.xyz/229.html2.安装 1.下载后找到PyCharm安装包,然后双击双击.ex…

es使用遇到的bug总结

本来版本7.4.0不行,最后换了个版本7.15.1就可以了,但又出现以下问题了: Beanpublic ElasticsearchClient elasticsearchClient() { // RestClient client RestClient.builder(new HttpHost("localhost", 9200,"http&q…

Paddle 基于ANN(全连接神经网络)的GAN(生成对抗网络)实现

什么是GAN GAN是生成对抗网络,将会根据一个随机向量,实现数据的生成(如生成手写数字、生成文本等)。 GAN的训练过程中,需要有一个生成器G和一个鉴别器D. 生成器用于生成数据,鉴定器用于鉴定数据的准确性&…

通过Docker Compose部署GitLab和GitLab Runner(一)

GitLab 是一个用于版本控制、项目管理和持续集成的开源软件平台,它提供了一整套工具,能够帮助团队高效地协作开发。而 GitLab Runner 则是 GitLab CI/CD 的执行者,用于运行持续集成和持续交付任务。 在本文中,我们将使用 Docker …

实现C++ Vector

手写C Vector&#xff0c;参考QVector 类声明 template<typename T >class IteratorVector;template<typename T >class IteratorVectorConst;template<typename T >class Vector final :public ContainerBase{public:explicit Vector()noexcept;explicit V…

【SpringBoot】-- 监听容器事件、Bean的前后置事件

目录 一、ApplicationContextInitializer 使用 1、自定义类&#xff0c;实现ApplicationContextInitializer接口 2、在META-INF/spring.factories配置文件中配置自定义类 二、ApplicationListener 使用 1、自定义类&#xff0c;实现ApplicationListener接口 2、在META-…

Selenium 自动化 —— 常用的定位器(Locator)

什么是定位器 定位器&#xff08;Locator&#xff09;是识别DOM中一个或多个特定元素的方法。 也可以叫选择器 Selenium 通过By类&#xff0c;提供了常见的定位器。具体语法如下&#xff1a; By.xxx("");我们选择单个元素时可以使用findByElement&#xff1a; Web…

三.Django--ORM(操作数据库)

目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…

Android 的 Timer 和 TimerTask

Timer 简介(来自Gemini) Timer 是 Java 中用于创建定时任务的类。它位于 java.util 包中。可以使用 Timer 来安排一次性或定期执行的任务。 每个 Timer 对象都对应一个后台线程。此线程负责从任务队列中检索任务并按计划执行它们。 使用 Timer 要使用 Timer&#xff0c;首先…

政安晨:【Keras机器学习示例演绎】(三十九)—— 使用 FNet 进行文本分类

目录 简介 模型 设置 加载数据集 对数据进行标记 格式化数据集 建立模型 训练我们的模型 与变换器模型比较 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&…

IAM帮你破解密码管理难题

面对让人头疼的密码管理难题&#xff0c;全球的政府、企业、安全厂商都在想办法。比如通过定期改密、强制添加特殊字符等方式提升密码强度&#xff0c;比如开展网络安全教育、提升员工对密码的重视程度&#xff0c;并且取得了显著效果。但是&#xff0c;想从根本上解决密码管理…

第二证券|炒股是波段好还是长期好?

炒股长时间比波段好一些&#xff0c;其原因如下&#xff1a; 1、长时间持有费用低 投资者在生意过程中&#xff0c;需求交纳必定的佣金费用、过户费用、印花税&#xff0c;而长时间持有股票&#xff0c;减少生意次数&#xff0c;能够节省一笔生意成本。 2、短期持有容易卖飞…

3.ERC4626

ERC4626是一个vault&#xff0c;在DAI中&#xff0c;使用ETH换取DAI。其流程为先充值ETH到maker vault。 Vault 资产的管理、分红用户充值某项资产获取某个凭证该凭证作为分红、推出的依据Yield Farming/借贷/质押等 以太坊改进提案EIP:ethereum improvemwnt proposal 最初E…

7.基于麻雀搜索算法(SSA)优化VMD参数(SSA-VMD)

01.智能优化算法优化VMD参数的使用说明 02.基本原理 麻雀搜索算法&#xff08;SSA&#xff09;是一种基于鸟类觅食行为的启发式优化算法&#xff0c;它模拟了麻雀在觅食时的群体行为&#xff0c;通过模拟麻雀的觅食过程来寻找问题的最优解。SSA的基本原理是通过模拟麻雀的搜索…

视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享

目录 一、JT/T 808标准简介 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;协议特点 1、通信方式 2、鉴权机制 3、消息分类 &#xff08;三&#xff09;协议主要内容 1、位置信息 2、报警信息 3、车辆控制 4、数据转发 二、代码和解释 &#xff08;一…

《ESP8266通信指南》13-Lua 简单入门(打印数据)

往期 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP8266通信指南》10-MQTT通信&#xff08;Arduino开发&#xff09;-CSDN博客 《ESP8266通信指南》9-TCP通信&#xff08;Arudino开发&#xff09;-CSDN博客 《ESP82…

AJAX知识点(前后端交互技术)

原生AJAX AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML&#xff0c;通过AJAX可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无需刷新就可获取数据。 AJAX不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式 …