MySQL视图、函数和存储过程是什么


一、视图

所谓视图,是指由 sql 查询语句检索出的结果集,以虚拟表的形式出现,与实际物理表不同,它在数据库中并不存在。视图的作用是为了简化复杂的查询,将多表关联和过滤操作集中到一个视图中,然后通过查询该视图来获取需要的结果。视图具有以下几个特点:

视图不存储数据,而是根据 SELECT 语句的结果动态生成的;
视图只能读取,不能写入;
视图可以基于一个或多个表创建。
下面是一个视图的创建示例:

CREATE VIEW vw_employee AS SELECT
e.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、*G 等。函数具有以下几个特点:

函数具有输入和输出,可以接收参数并返回结果;
函数可以调用其他函数;
函数可以嵌套调用。
下面是一个标量函数的创建示例:

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
);

插入一些数据:

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion
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视图、函数和存储过程是什么的详细内容,更多请关注其它相关文章!


# 将其  # 网站的建设原则有哪些  # 陕西制造业网站优化效果  # 北京网站 推广  # 晋中品牌推广营销中心  # 台州网站建设厂商排行  # 铜川营销推广有哪些  # 便利店展示架营销推广  # 惠州整站网站优化  # 团风seo推广对比公司  # 嘉兴企业营销产品推广  # MySQL  # 可以用  # 是指  # 是一种  # 如何设置  # 多个  # 几个  # 是一个  # 镜像  # 存储过程 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: t3出行如何使用微信支付  支付宝网页版在线入口 支付宝官网电脑登录入口  163邮箱网页版入口 163邮箱在线使用  Win11怎么开启HDR_Windows 11显示器画质增强设置  使用AI在VS Code中将代码从一种语言翻译成另一种  冬季去哪个城市旅游更有可能观测到极光  C#解析并修改XML后保存 如何确保格式与编码的正确性  极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方  Linux如何自动分析系统异常日志_Linux日志智能检测  斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来  学习通网页版课程打不开_课程无法访问时的解决方法  J*aScript与HTML元素交互:图片点击事件与链接处理教程  Pydantic 中“schema”字段命名冲突的解决方案  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  Python中对象引用与链表属性赋值的机制解析  J*aScript实现下拉菜单驱动的动态表格数据展示  知音漫客官网首页入口_知音漫客热门漫画推荐  Retrofit根路径POST请求:@POST("/") 的应用与解析  OTT月报 | 2025年9月智能电视大数据报告  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  怎么恢复删除的电脑文件_数据恢复软件使用教程  雨课堂官网在线登录 网页版雨课堂登录链接  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  b站怎么用微信登录_b站微信登录方法  tiktok国际版入口_tiktok官网网页版链接  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  抖音猜你想搜能说明对方搜过吗  阿里云共享相册入口在哪  Keras中Convolution2D层及其核心辅助层详解  diskgenius分区工具如何设置Bios启动项  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  偃武诸葛亮阵容搭配推荐  百度识图图像分析 百度识图识别平台  电脑开不了机怎么办 电脑无法开机的解决方法  响应式设计中动态背景颜色条的实现指南  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  德邦物流在线查询系统 德邦快递货物运输追踪  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  windows10怎么设置电源按钮_windows10按下电源键功能修改  抖音网页版地址直接进入_抖音网页版在线观看入口  Composer reinstall命令重装损坏的包  139邮箱登录入口官网 139邮箱登录入口官网网址  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  《万兴喵影》导出视频方法  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复 

 2023-06-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.