mysql数据库函数有哪些(mysql函数列表)


MySQL数据库函数是数据库管理系统中用于数据处理、逻辑控制和业务计算的核心工具。作为关系型数据库的代表性产品,MySQL通过内置函数实现了对字符串、数值、日期、聚合运算等多维度数据的操作能力。从早期版本到8.0及以上版本的演进过程中,MySQL函数体系不断扩展,形成了覆盖基础运算、复杂逻辑处理、JSON数据操作及窗口函数等八大类功能集群。这些函数不仅支撑着SQL查询的灵活性,更通过与存储过程、触发器等对象的配合,构建起完整的业务逻辑处理框架。值得注意的是,不同函数在不同存储引擎(如InnoDB与MyISAM)中的执行效率存在差异,且部分函数在分布式架构下的兼容性需特别关注。
一、字符串处理函数
字符串函数是MySQL中最基础的函数类别,涵盖拼接、截取、替换、格式化等操作。
函数名称 | 功能描述 | 典型应用 | 性能特征 |
---|---|---|---|
CONCAT(str1, str2, ...) | 字符串拼接 | 合并多个字段生成完整地址信息 | 优于运算符拼接,支持NULL值处理 |
SUBSTRING(str, pos, len) | 子串截取 | 从身份证号中提取生日信息 | 固定长度截取效率高于正则表达式 |
REPLACE(str, srch, repl) | 字符串替换 | 标准化电话号码格式(去除非数字字符) | 单次替换性能优于多次循环调用 |
实际应用中需注意字符集兼容性问题,如UTF-8编码下的字符截取可能产生乱码,建议配合CHAR_LENGTH()函数使用。
二、数值处理函数
函数名称 | 功能描述 | 返回类型 | 精度控制 |
---|---|---|---|
ROUND(num, decimals) | 四舍五入 | DECIMAL/DOUBLE | 支持自定义小数位数 |
CEIL(num) / CEILING(num) | 向上取整 | INTEGER | 常用于分页计算 |
MOD(num1, num2) | 取模运算 | INTEGER | 负数处理需注意符号规则 |
在金融类应用中,建议优先使用ROUND()而非FLOOR()/CEIL(),因其可精确控制小数位数。对于大数值计算,应关注BIGINT类型的溢出风险。
三、日期时间函数
函数名称 | 功能描述 | 返回格式 | 时区影响 |
---|---|---|---|
DATE_FORMAT(date, fmt) | 格式化输出 | 自定义格式字符串 | 受系统时区设置影响 |
TIMESTAMPDIFF(unit, start, end) | 时间差计算 | 整数(单位数量) | 自动处理时区转换 |
UNIX_TIMESTAMP(date) | 时间戳转换 | INTEGER | UTC时间基准 |
跨时区应用需特别注意DATE_FORMAT()的%H%i%s参数组合,建议统一使用UTC时间存储。对于闰秒等特殊时间处理,应配合DATE_ADD()进行边界校验。
四、聚合函数
函数名称 | 功能描述 | 空值处理 | 组合应用 |
---|---|---|---|
COUNT(expr) | 计数统计 | 忽略NULL值 | 常与DISTINCT联合使用 |
SUM(expr) | 求和运算 | 数值型NULL按0处理 | 需配合GROUP BY使用 |
AVG(expr) | 平均值计算 | 自动过滤非数值型NULL | 结果保留默认小数位数 |
在大数据量场景下,聚合函数的性能优化需注意索引设计。对于包含NULL的统计,建议使用COALESCE()预处理空值。
五、控制流函数
函数名称 | 功能描述 | 返回类型 | 适用场景 |
---|---|---|---|
IF(cond, true_val, false_val) | 条件判断 | 与条件类型一致 | 数据清洗转换 |
CASE WHEN...THEN...ELSE...END | 多条件分支 | 任意数据类型 | 复杂业务规则实现 |
IIF(cond, true_val, false_val) | 简化版条件判断 | 与条件类型一致 | 简单逻辑快速实现 |
在存储过程中嵌套使用时,需注意条件表达式的括号优先级。对于多层嵌套逻辑,建议分解为多个独立函数调用。
六、加密与哈希函数
函数名称 | 算法类型 | 输出长度 | 安全强度 |
---|---|---|---|
MD5(str) | 哈希算法 | 128位(32字符) | 存在碰撞风险 |
SHA1(str) | 安全哈希 | 160位(40字符) | 已发现理论碰撞 |
SHA2(str, bit) | 增强哈希 | 224/256/384/512位 | 推荐使用256位以上 |
密码存储时应配合盐值(salt)使用,建议采用SHA2(?, 256)算法。二进制数据加密可使用AES_ENCRYPT()/AES_DECRYPT()函数对。
七、JSON处理函数
函数名称 | 功能描述 | 返回类型 | JSON路径支持 |
---|---|---|---|
JSON_EXTRACT(doc, path) | 数据提取 | 与原始数据类型一致 | 支持$.field语法 |
JSON_MERGE_PRESERVE(obj1, obj2) | 对象合并 | JSON对象 | 保留原始键名 |
JSON_SEARCH(doc, path) | 路径搜索 | VARCHAR(路径表达式) | 支持通配符匹配 |
在MySQL 5.7+版本中,JSON函数可直接建立索引。数组元素访问需注意下标起始值为0,且需进行类型校验防止错误。
id="mysql-window-functions">
函数名称 功能描述排序规则支持窗口帧类型
ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) 分配连续行号支持升序/降序排列RANGE | ROWS | UNBOUNDED
NTILE(n) OVER (ORDER BY sales) 分组排名(等分)需明确分组数量n静态划分窗口范围
DENSE_RANK() OVER (PARTITION BY dept ORDER BY salary DESC)"> 密集排名(允许并列)">相同值共享排名编号">支持动态排序规则">
窗口函数彻底改变了MySQL的数据分析能力,特别适合处理TOP-N查询、移动平均计算等场景。在物化视图尚未完全支持的情况下,可通过临时表结合窗口函数实现类似效果。需注意窗口帧定义对结果集的影响,特别是在处理时间序列数据时。">
从基础运算到高级分析,MySQL函数体系构建了完整的数据处理生态。掌握这些函数的特性和使用场景,不仅能提升SQL编写效率,更能实现复杂的业务逻辑。随着MySQL向实时分析领域拓展,窗口函数、JSON处理等新特性的价值将日益凸显。开发者应根据实际业务需求,结合执行计划分析,合理选用函数组合,同时关注版本升级带来的新功能变化。">





