news 2026/6/15 16:10:08

MySQL 存储过程与函数:核心辨析与应用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 存储过程与函数:核心辨析与应用指南

一、 存储过程(Stored Procedure)

存储过程是一组预编译并存储在数据库中的 SQL 语句集合,可视为在数据库端封装的可重复调用业务逻辑单元。它侧重于执行一系列操作,不一定返回结果值。

示例:创建并调用存储过程

sql

DELIMITER //

CREATE PROCEDURE sp_add_user(IN p_user_name VARCHAR(50))

BEGIN

INSERT INTO user(name, create_time) VALUES (p_user_name, NOW());

END //

DELIMITER ;

调用方式

CALL sp_add_user('Tom');

核心特点:支持复杂的业务逻辑流程控制、事务管理,以及通过 `IN`、`OUT`、`INOUT` 参数与调用方交互。

二、 函数(Stored Function)

函数是必须返回一个确定值的数据库程序单元。它常用于计算、数据转换或格式化,并能直接嵌入 SQL 语句中作为表达式使用。

示例:创建并调用函数

sql

DELIMITER //

CREATE FUNCTION fn_get_user_count()

RETURNS INT

DETERMINISTIC

READS SQL DATA

BEGIN

DECLARE v_count INT;

SELECT COUNT() INTO v_count FROM user;

RETURN v_count;

END //

DELIMITER ;

调用方式(可嵌入SQL)

SELECT fn_get_user_count();

SELECT id, name FROM user WHERE LENGTH(name) > fn_get_min_length();

核心特点:必须有返回值,通常不修改数据库状态,主要用于查询和计算场景。

三、 核心区别对比

对比维度存储过程函数
返回值可选(可通过OUT参数返回)必须且仅能返回一个值
调用方式`CALL procedure_name(...);`在SQL语句中直接调用 `SELECT function_name(...);`
主要用途封装业务逻辑、执行批量更新、数据处理等操作执行计算、数据格式化、条件判断等
SQL语句嵌入不可直接嵌入SELECT等语句可直接作为表达式嵌入SQL
参数模式支持 IN, OUT, INOUT仅支持 IN
事务控制支持(可包含 BEGIN/COMMIT/ROLLBACK)通常不支持(除非在存储过程中调用)
适用场景月度报表生成、数据迁移、复杂业务规则处理金额四舍五入、手机号脱敏、状态值映射转换

四、 选型建议与应用场景

选择存储过程当:

业务逻辑复杂,涉及多步SQL操作和事务控制。

需要执行批量数据操作(增删改),尤其追求在数据库端减少网络交互次数。

逻辑主要在数据库内部完成,作为API提供给应用程序调用。

选择函数当:

目的是进行一个计算或转换,并得到一个可用于SQL表达式的标量值。

需要在查询中频繁复用的通用逻辑,例如数据清洗、格式标准化、动态条件计算。

逻辑相对独立,不改变数据状态,符合确定性函数特性。

五、 总结

简而言之,可将存储过程视为数据库中的可执行程序,用于处理复杂的操作流程;而函数则是可重用的计算表达式,旨在封装计算逻辑并返回结果值。

决策口诀:

封装流程与操作 → 采用存储过程

封装计算与取值 → 采用函数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 6:33:46

Wi-Fi 7路由器核心特性对比分析

在当下处于高速发展态势的家庭网络环境里,Wi-Fi 7技术的普及意味着无线连接步入了一个全新的阶段。那些具有支持这一前沿性标准功能的路由器产品,它们除了在理论速率方面达成了飞跃之外,还借助一系列创新技术把高密度连接、低延迟传输以及网络…

作者头像 李华
网站建设 2026/6/15 12:23:36

全链路CRM系统横向对比:业务、生产、项目与上下游的深度博弈

在企业数字化转型中,CRM系统的价值早已超越“客户管理”——从前端销售到后端生产,从内部流程到上下游协同,全链路能力成为企业选择CRM的核心考量。本文选取超兔一体云、Freshsales、智赢云、钉钉CRM、销售易、Zoho CRM、HubSpot CRM七大主流…

作者头像 李华
网站建设 2026/6/15 14:01:48

textoon live2d

生成数字人 https://github.com/xiaomingnio/live2d_speech_bot 模型下载: https://civitai.com/models/125907/realcartoon-xl sdxl-动漫二次元_2.0.safetensors 夸克网盘分享: https://pan.quark.cn/s/adc20b616a30

作者头像 李华
网站建设 2026/6/15 15:07:47

探索储能双向 DCDC 变换器:双向 Buck - Boost 电路仿真之旅

双向buck-boost电路仿真模型-储能双向DCDC变换器 电压电流双闭环PI控制 蓄电池充放电模式可切换 恒流充电/恒压输出 Matlab/Simulink模型在电力电子领域,储能双向 DCDC 变换器是一个相当重要的存在,今天咱们就来聊聊其中基于双向 Buck - Boost 电路的仿…

作者头像 李华
网站建设 2026/6/15 15:20:28

luainstaller 2.0: 将你的.lua脚本打包为二进制可执行程序

将.lua脚本打包为二进制有两种方式: 传统的拼接lua解释器代码的srlua, 以及更现代的, 真正的进行编译的luastatic. 不过, 它们各有各的问题: srlua 只能打包单.lua文件需要自行编译 luastatic 需要编译环境仅适用Linux luainstaller是一个开源的Python库, 封装了预编译的srl…

作者头像 李华
网站建设 2026/6/15 14:00:04

33、网络连接配置全解析

网络连接配置全解析 1. 网络基础组件 在网络连接的世界里,有几个关键的基础组件起着至关重要的作用。 - 路由器(Router) :路由器,也被称为网关,它的主要功能是将两个或更多的网络连接在一起。通常,我们的桌面计算机或服务器会直接连接到少数其他计算机,其中就包括…

作者头像 李华