环球观热点:MySQL 视图、函数和存储过程详解
目录
一、视图二、函数三、存储过程MySQL 是一种流行的关系型数据库管理系统,其具有强大的功能和灵活性,使其成为了许多企业和个人喜爱的数据库选择。在 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、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视图、函数和存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签:
相关文章
发热、支气管肺炎患儿近期增多,医生:这种情况应及时就医—
近期发热、支气管肺炎的患儿增多。中日友好医院护理部副主任郑智提醒,如果发热患儿精神状态不佳应及时就医
港交所 AIGC 第一股要来了!谷歌、歌尔参投,年营收 5 亿元
智东西(公众号:zhidxcom)作者|程茜编辑|心缘智东西6月2日报道,本周二,国内AI创企出门问问港交所IPO获
最新快讯!孩子王(301078.SZ):KidsGPT智能顾问已在六一童玩节期间通过孩子王APP等上线应用
格隆汇6月2日丨有投资者在投资者互动平台向孩子王(301078 SZ)提问,“公司发起的童玩节已接近尾声,期间公
北京新能源小客车申请资格_北京小客车新能源指标怎么申请成功
登录城市小客车指标控制管理信息系统,进入用户中心;申请指标,在指标分配功能区选择人员类型,点击进入指
马龙谈巴特勒兑现去年抢七失利后诺言:他强硬冷血 是一名战士
马龙谈巴特勒兑现去年抢七失利后诺言:他强硬冷血是一名战士直播吧5月31日讯今天,是掘金的训练日,训练结
每日讯息!word怎么自动生成目录和页码_word插入目录
1、工具:word2007步骤:打开word2007,点开左侧目录。2、选一款自动目录。3、或者,如果需要对目录的格式什
环球简讯:湖北省第一届“万步有约”谷城赛区健走激励大赛正式启动
湖北日报客户端讯(通讯员詹丽李杰敏邓植元廖俊)5月31日上午,湖北省第一届“万步有约”谷城赛区健走激励
暗黑破坏神 4 社区在游戏发布前在其他大陆打印 T 恤、烘烤蛋糕和购买鸡肉
距离暗黑破坏神4的抢先体验版发布还有一天多的时间,但现在就完全走出你的葫芦永远不会太早。当沙子从沙漏
注意!万兴科技:实际控制人吴太兵计划减持公司股份不超过206万股|当前热闻
万兴科技(SZ300624,收盘价:149 81元)6月1日晚间发布公告称,控股股东、实际控制人吴太兵先生直接持有万
闯黄灯算违章吗2020(闯黄灯算违章吗2021)|世界快消息
大家好,小乐来为大家解答以上的问题。闯黄灯算违章吗2020,闯黄灯算违章吗2021这个很多人还不知道,现在让我
迎泽关注丨迎泽区召开深化危险化学品安全风险集中治理暨安全生产月工作安排部署会
6月1日,迎泽区召开深化危险化学品安全风险集中治理暨安全生产月工作安排部署会,传达贯彻省、市相关会议精
农业农村部:研究攻克制约多收多用国产大豆面临的瓶颈问题 持续做大做强国产大豆产业
农业农村部部长唐仁健5月31日在天津开展大豆压榨加工贸易专题调研。他强调,国产大豆产业要实现良性循环、
多处“失控”!断电!疏散近1.85万人!这里野火肆虐,浓烟飘往美国……|全球热门
截至当地时间5月30日,加拿大东部新斯科舍省仍有13处野火在燃烧,野火产生的浓烟飘往美国,预计将影响美国
【元宇宙之约】戴尔中国研究院首席科学家李三平:通用大模型不是戴尔的首选-当前聚焦
财联社6月1日讯(记者徐赐豪)ChatGPT问世后,各大公司争相开发大模型,但作为老牌科技公司的戴尔似乎没有
世界快看:猫眼倒卖转让演出经营权遭行政处罚 没收违法所得并被罚7万元
中国网科技5月31日讯(记者李婷)天眼查App显示,近日,天津猫眼现场科技有限公司收到一份行政处罚通知书((京
海螺水泥(600585)6月1日主力资金净卖出2907.96万元
截至2023年6月1日收盘,海螺水泥(600585)报收于25 0元,下跌0 24%,换手率0 31%,成交量12 51万手,成交额3 13亿元。