Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

存储函数

存储函数是有返回值的存储过程,参数只能是 IN 类型,调用方式和普通函数一样,可以直接放在 SELECT 中。

一、语法

CREATE FUNCTION 存储函数名称([参数列表])
RETURNS 类型 [characteristic ...]
BEGIN
    -- SQL 语句
    RETURN ...;
END;
characteristic含义
DETERMINISTIC相同的输入参数总是产生相同的结果
NO SQL不包含 SQL 语句
READS SQL DATA包含读取数据的语句,但不包含写入数据的语句

二、示例

-- 从 1 累加到 n
CREATE FUNCTION fun1(n INT)
RETURNS INT DETERMINISTIC
BEGIN
    DECLARE total INT DEFAULT 0;
    WHILE n > 0 DO
        SET total := total + n;
        SET n := n - 1;
    END WHILE;
    RETURN total;
END;

SELECT fun1(100);        -- 5050

三、与存储过程的区别

对比项存储过程存储函数
返回值通过 OUT / INOUT 参数返回,可多个RETURN 返回单个值
参数类型IN / OUT / INOUT只能是 IN
调用方式CALL 名称(...)SELECT 名称(...),可嵌入表达式

开启二进制日志时,若创建函数没有声明 DETERMINISTIC、NO SQL 或 READS SQL DATA,可能报错(错误码 1418)。

速查

-- 存储函数:RETURN 单值,可直接放进 SELECT
CREATE FUNCTION fun1(n INT) RETURNS INT DETERMINISTIC
BEGIN
    DECLARE total INT DEFAULT 0;
    WHILE n > 0 DO SET total := total + n; SET n := n - 1; END WHILE;
    RETURN total;
END;
SELECT fun1(100);                        -- 5050
要做什么用什么
需要在 SELECT 中计算存储函数(参数只能 IN)
需要多个返回值改用 存储过程 的 OUT 参数

相关

  • 存储过程:CALL 调用、OUT / INOUT 参数
  • 存储过程:流程控制、游标与条件处理:函数体内同样可用 IF / 循环
  • MySQL 函数:内置函数(字符串 / 数值 / 日期 / 流程)
最近更新: 2026/10/13 22:04
Contributors: liujw
Prev
存储过程 - 流程控制、游标与条件处理
Next
触发器