电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL 視圖、函數和存儲過程詳解

瀏覽:132日期:2023-05-05 10:12:05
目錄
  • 一、視圖
  • 二、函數
  • 三、存儲過程

MySQL 是一種流行的關系型數據庫管理系統,其具有強大的功能和靈活性,使其成為了許多企業和個人喜愛的數據庫選擇。在 MySQL 中,視圖、函數和存儲過程是常見的數據庫對象,它們都有助于提高數據的處理效率和可重用性。

一、視圖

視圖是一種虛擬表,它是根據 SQL 語句檢索出的結果集,與物理表不同的是,它并不在數據庫中實際存在。視圖的作用是為了簡化復雜的查詢,將多表關聯和過濾操作集中到一個視圖中,然后通過查詢該視圖來獲取需要的結果。視圖具有以下幾個特點:

視圖不存儲數據,而是根據 SELECT 語句的結果動態生成的;
視圖只能讀取,不能寫入;
視圖可以基于一個或多個表創建。
下面是一個視圖的創建示例:

CREATE VIEW vw_employee AS SELECTe.emp_no,e.first_name,e.last_name,d.dept_name FROM	employees e	JOIN departments d ON e.dept_no = d.dept_no;

該語句創建了一個名為 vw_employee 的視圖,它包含了 employees 和 departments 兩個表中的數據,可以用以下語句查詢該視圖:

SELECT * FROM vw_employee;

二、函數

函數是一種可重用的程序單元,它封裝了一段特定的邏輯,可以用于完成特定的任務。在 MySQL 中,函數分為兩類:標量函數和聚合函數。標量函數返回單個值,而聚合函數返回一個聚合值,如 COUNT、SUM、AVG 等。函數具有以下幾個特點:

函數具有輸入和輸出,可以接收參數并返回結果;
函數可以調用其他函數;
函數可以嵌套調用。
下面是一個標量函數的創建示例:

CREATE FUNCTION get_employee_name ( emp_no INT ) RETURNS VARCHAR ( 50 ) BEGIN	DECLARE		emp_name VARCHAR ( 50 );	SELECT		CONCAT_WS( " ", first_name, last_name ) INTO emp_name 	FROM		employees 	WHERE		emp_no = emp_no;RETURN emp_name;END;

該語句創建了一個名為 get_employee_name 的標量函數,它接收一個員工編號,返回該員工的姓名。
調用該函數:

SELECT get_employee_name (100001);

三、存儲過程

存儲過程是一組預定義的 SQL 語句集合,它們被封裝在一個單元內,可以被重復調用。存儲過程可以接收輸入參數和輸出參數,它們具有以下幾個特點:

存儲過程可以包含多條 SQL 語句,可以完成復雜的任務;
存儲過程可以在服務器端執行,減少網絡傳輸的開銷;
存儲過程可以被多個應用程序共享。
下面是一個使用存儲過程的示例,假設我們有以下三個表:

employees 表:存儲員工的基本信息

CREATE TABLE employees (  emp_no INT PRIMARY KEY,  first_name VARCHAR(50),  last_name VARCHAR(50),  gender ENUM("M", "F"),  birth_date DATE,  hire_date DATE);

插入一些數據:

INSERT INTO employees VALUES(10001, "Georgi", "Facello", "M", "1953-09-02", "1986-06-26"),(10002, "Bezalel", "Simmel", "F", "1964-06-02", "1985-11-21"),(10003, "Parto", "Bamford", "M", "1959-12-03", "1986-08-28"),(10004, "Chirstian", "Koblick", "M", "1955-01-05", "1986-12-01"),(10005, "Kyoichi", "Maliniak", "M", "1959-09-12", "1989-09-12"),(10006, "Anneke", "Preusig", "F", "1953-04-20", "1989-06-02"),(10007, "Tzvetan", "Zielinski", "F", "1957-05-23", "1989-02-10");

departments 表:存儲部門的基本信息

CREATE TABLE departments (  dept_no CHAR(4) PRIMARY KEY,  dept_name VARCHAR(50));

插入一些數據:

INSERT INTO departments VALUES("d001", "Marketing"),("d002", "Finance"),("d003", "Human Resources"),("d004", "Production"),("d005", "Development"),("d006", "Quality Management"),("d007", "Sales"),("d008", "Research");

dept_emp 表:存儲員工與部門的關系

CREATE TABLE dept_emp (  emp_no INT,  dept_no CHAR(4),  from_date DATE,  to_date DATE,  PRIMARY KEY (emp_no, dept_no));

插入一些數據:

INSERT INTO dept_emp VALUES(10001, "d001", "1986-06-26", "9999-01-01"),(10002, "d001", "1985-11-21", "9999-01-01"),(10003, "d002", "1986-08-28", "9999-01-01"),(10004, "d005", "1986-12-01", "9999-01-01"),(10005, "d005", "1989-09-12", "9999-01-01"),(10006, "d006", "1989-06-02", "9999-01-01"),(10007, "d007", "1989-02-10", "9999-01-01");

現在,我們可以創建一個存儲過程來查詢某個部門中的員工數量和員工詳細信息:

CREATE PROCEDURE get_employee_by_dept ( IN dept_name VARCHAR ( 50 ), OUT employee_count INT ) BEGIN	SELECT		COUNT(*) INTO employee_count 	FROM		employees e		JOIN dept_emp de ON e.emp_no = de.emp_no		JOIN departments d ON de.dept_no = d.dept_no 	WHERE		d.dept_name = dept_name;	SELECT		e.emp_no,		e.first_name,		e.last_name,		e.gender,		e.birth_date,		e.hire_date 	FROM		employees e		JOIN dept_emp de ON e.emp_no = de.emp_no		JOIN departments d ON de.dept_no = d.dept_no 	WHERE	d.dept_name = dept_name;END;

該語句創建了一個名為 get_employee_by_dept 的存儲過程,它接收一個部門名稱作為輸入參數,并返回該部門中的員工數量和員工詳細信息。

調用該函數

CALL get_employee_by_dept("Development", @employee_count);SELECT @employee_count;

在實際應用中,視圖、函數和存儲過程都可以發揮重要的作用。例如,在一個復雜的企業應用中,可能需要從多個表中獲取數據,并對其進行過濾和聚合操作,這時可以使用視圖來簡化復雜的查詢。另外,如果有一些常用的業務邏輯需要重復使用,可以將其封裝為函數或存儲過程,以提高代碼的重用性和可維護性。

總之,視圖、函數和存儲過程都是 MySQL 中非常重要的數據庫對象,它們可以提高數據庫的效率和可重用性,使開發人員更加高效地處理數據。在實際應用中,可以根據具體的業務需求,靈活地使用這些對象,以提高數據處理的效率和質量。

到此這篇關于MySQL 視圖、函數和存儲過程的文章就介紹到這了,更多相關MySQL 視圖、函數和存儲過程內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MySQL
主站蜘蛛池模板: 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 杭州成人高考_浙江省成人高考网上报名| 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 逗网红-抖音网红-快手网红-各大平台网红物品导航 | 粘度计,数显粘度计,指针旋转粘度计| 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 北京成考网-北京成人高考网 |