數據庫的存儲過程、函數與觸發器

在這里插入圖片描述

使用下面的場景來引入

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.利用存儲過程在員工表中插入記錄.

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,'新員工');

4.創建觸發器。
插入

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建立索引。

CREATE INDEX index_userName 
ON employee(username);

6.建立員工部門工資視圖(包含員工名稱,部門名稱,基本工資,應發工資,獎金,缺勤扣錢)

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.利用觸發器實現插入請假信息時,審核人編號自動填入請假人所在部門的部門經理編號。

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.pswp.cn/diannao/13087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13087.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源連鎖收銀系統哪個好

針對開源連鎖收銀系統的選擇,商淘云是一個備受關注的候選。商淘云以其功能豐富、易于定制和穩定性等優勢,吸引了眾多企業和開發者的關注。下面將從四個方面探討商淘云開源連鎖收銀系統的優勢: 首先,商淘云提供了豐富的功能模塊。作…

如何查看SNMP設備的OID

什么是OID和MIB OID OID 代表對象標識符。 OID 唯一地標識 MIB 層次結構中的托管對象。 這可以被描述為一棵樹,其級別由不同的組織分配。MIB MIB(管理信息基)提供數字化OID到可讀文本的映射。 使用MIB Browser掃描OID 我的設備是一臺UPS SN…

【Uniapp小程序】onShareAppMessage異步處理請求完后再分享

分享按鈕 <button type"primary" open-type"share">保存并分享 </button>修改onShareAppMessage saveImage為promise方法 async onShareAppMessage() {const saveRes await saveImage();if (saveRes.code 200) {return {title: "tit…

每日兩題 / 236. 二叉樹的最近公共祖先 124. 二叉樹中的最大路徑和(LeetCode熱題100)

236. 二叉樹的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; dfs統計根節點到p&#xff0c;q節點的路徑&#xff0c;兩條路徑中最后一個相同節點就是公共祖先 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

windows部署騰訊tmagic-editor02-Runtime

創建editor項目 將上一教程中的hello-world復制過來&#xff0c;改名hello-editor 創建runtime項目 和hello-editor同級 pnpm create vite刪除src/components/HelloWorld.vue 按鈕需要用的ts types依賴 pnpm add tmagic/schema tmagic/stage實現runtime 將hello-editor中…

【C語言】5.C語言函數(2)

文章目錄 7.嵌套調?和鏈式訪問7.1 嵌套調?7.2 鏈式訪問 8.函數的聲明和定義8.1 單個?件8.2 多個?件8.3 static 和 extern8.3.1 static 修飾局部變量8.3.2 static 修飾全局變量8.3.3 static 修飾函數 7.嵌套調?和鏈式訪問 7.1 嵌套調? 嵌套調用就是函數之間的互相調用。…

Docker安裝Mosquitto

在物聯網項目中&#xff0c;我們經常用到MQTT協議&#xff0c;用MQTT協議做交互就需要部署一個MQTT服務&#xff0c;而mosquitto是一個常用的MQTT應用服務&#xff0c; Mosquitto是一個實現了消息推送協議MQTT v3.1的開源消息代理軟件。MQTT&#xff08;Message Queuing Teleme…

python的幾個關于文本文件的demo腳本

部分來自WeTab AI PRO 1.在文末添加一行文字 def add_endline(filename, texts): # 文本末尾增加一行with open(filename, a) as file:file.write(f\n{texts})file.close() 當使用 open() 函數打開文件時&#xff0c;第二個參數指定了文件的打開模式。常見的文件打開模式包…

【LeetCode】每日一題 2024_5_14 完成所有任務需要的最少輪數(哈希)

文章目錄 LeetCode&#xff1f;啟動&#xff01;&#xff01;&#xff01;題目&#xff1a;完成所有任務需要的最少輪數題目描述代碼與解題思路 每天進步一點點 LeetCode&#xff1f;啟動&#xff01;&#xff01;&#xff01; 題目&#xff1a;完成所有任務需要的最少輪數 題…

拿到測試點如何跑

首先你要知道你測試點文件的位置,然后你要創建一個接收結果的文件,將你代碼中的std::cin替換成infile,std::cout替換成outfile即可 #include <fstream> int main() {// 打開輸入文件std::ifstream infile("C:\\Users\\Downloads\\P4779_1.in");// 打開輸出文件…

OpenCV 圖像退化與增強

退化 濾波 img_averagingcv2.blur(img2,(3,3)) #均值濾波 img_median cv2.medianBlur(img2,3) #中值濾波高斯模糊 result cv2.GaussianBlur(source, (11,11), 0)高斯噪聲 def add_noise_Guass(img, mean0, var0.01): # 添加高斯噪聲img np.array(img / 255, dtypefloat…

麒麟 V10 安裝docker2

1. 查看系統版本 2.安裝docker-ce 添加源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安裝docker yum install docker-ce --allowerasing 重啟docker systemctl start docker 3.安裝nvidia-container-runtime 添…

el-tooltip 提示框樣式修改?

【element-plus el-tooltip官網地址&#xff1a; Tooltip 文字提示 | Element Plus】 <el-tooltippopper-class"Tooltip":content"content"placement"top"effect"light" ><span class"content">{{ content }}&l…

【TypeScript的JSX簡介以及使用方法】

TypeScript 是 JavaScript 的一個超集&#xff0c;它添加了靜態類型檢查和面向對象編程的特性。JSX 是一種 JavaScript 的語法擴展&#xff0c;主要用于 React 組件的聲明性渲染。TypeScript 完美地支持 JSX&#xff0c;并允許你為 React 組件和它們的 props 添加類型注解。 T…

C中Mysql的基本api接口

一、初始化參數返回值 二、鏈接服務器三、執行SQL語句注意事項 四、獲取結果集4.1mysql_affected_rows和mysql_num_rows4.2mysql_store_result與mysql_free_result注意事項注意事項整體的工作流程 4.3mysql_use_result&#xff08;&#xff09;4.4mysql_field_count&#xff08…

001 側邊欄 地址增刪改查 默認地址代碼沒完善

文章目錄 user_index.htmlmyaccount_style.cssmyaccount_scripts.jsaddress_edit.htmlReceiverAddressReceiverAddressControllerReceiverAddressServiceImplIReceiverAddressServiceRFshopAppApplicationServletInitializerpom.xmlReceiverAddressMapper.xmlReceiverAddressMa…

文件存儲解決方案-阿里云OSS

文章目錄 1.菜單分級顯示問題1.問題引出1.蘋果燈&#xff0c;放到節能燈下面也就是id大于1272.查看菜單&#xff0c;并沒有出現蘋果燈3.放到燈具下面id42&#xff0c;就可以顯示 2.問題分析和解決1.判斷可能出現問題的位置2.找到遞歸返回樹形菜單數據的位置3.這里出現問題的原因…

Golang 的 unmarshal 踩坑指南

文章目錄 1. 寫在最前面2. 字段區分出空字段還是未設置字段2.1 問題描述2.2 解決 3. 字段支持多種類型 & 按需做不同類型處理3.1 問題描述3.2 解決 4. 碎碎念5. 參考資料 1. 寫在最前面 筆者最近在實現將內部通知系統的數據定義轉化為產品定義的對外提供的數據結構。 舉例…

算法學習筆記(5.0)-基于比較的高效排序算法-歸并排序

##時間復雜度O(nlogn) 目錄 ##時間復雜度O(nlogn) ##遞歸實現歸并排序 ##原理 ##圖例 ##代碼實現 ##非遞歸實現歸并排序 ##釋 #代碼實現 ##遞歸實現歸并排序 ##原理 是一種基于分治策略的基礎排序算法。 1.劃分階段&#xff1a;通過不斷遞歸地將數組從中點處分開&…

Java 開發 框架安全:Spring 命令執行漏洞.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一個用于構建企業級應用程序的開源框架。它提供了一種全面的編程和配置模型&#xff0c;可以簡化應用程序的開發過程。Spring 框架的核心特性包括依賴注入&#xff08;Dependency Injection&#xff09;、面向切面編程&#xff08;Aspect-Or…