网站首页 > 博客文章 正文
前述3篇文章已经分享了Mysql的高级特性:窗口函数、wit通用表达式和json函数,本文将继续分享高级特性,自定义函数,分三部分呈现:
第一部分,介绍Mysql的自定义函数。
第二部分,实战,解决问题。
第三部分,总结。
一、自定义函数
通常编程语言中的函数是必备技能,不管是面向对象还是面向过程,都离不开函数。Mysql中也有函数功能,常用的是内置函数(built-in functions),自定义函数功能也要学会,很实用。
1、创建函数
下面2个简单的实例找下整体的定义感觉。
1.1 无参函数
1.2 有参函数
函数的括号里有参数。
2、声明
函数定义必须声明方式,否则会报错。截取官方文档中的说明:
When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication. By default, for a CREATE FUNCTION statement to be accepted, at least one of DETERMINISTIC, NO SQL, or READS SQL DATA must be specified explicitly. Otherwise an error occurs: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
3、复杂函数体
在函数体body中,可以实现复杂的逻辑,这样就把很多不断重复做的查询统计预先定义好,直接调用函数即可。
函数体中的语法更丰富,相当于就是编程语言,有控制、逻辑、分析、流程、变量等。之前分享的语法也可以运用到body中。
3、函数的增删改查
数据表通常说增删改查,函数也有这个说法,谁让是自定义的呢,不让改和删还了得。
3.1 增
在上面已经呈现。
3.2 查列表
3.3 查定义
3.4 删
3.3 改
官方文档显示,不允许修改,所以只能先删再建。
For stored procedures and functions and for triggers, you must drop the object and re-create it to assign a different DEFINER account.
查到原来定义,修改好,删掉原来的函数,再执行新增修改后的函数。
二、实战
1、类数组转为json数组
继续之前案例,这样就方便很多了。在同一个分析主题内,f_json()函数会让sql清爽许多。
2、计算字符中匹配字符的个数
这也是此前案例中用到的场景,补充了字符函数的缺失功能——字符计数。
三、总结
(1)函数,把复杂的逻辑封装起来,直接调用,会使sql看起来清爽许多。
(2)笔者,常常唠叨的就是,重复操作的一定要封装为函数(不过用的R语言,后续也有R专栏)。
(3)使用自定义函数,就不得不提存储过程。关注后续文章。
猜你喜欢
- 2024-10-04 TP5 where数组查询(模糊查询--多个查询条件)
- 2024-10-04 sql基础(六)(sql基本知识点)
- 2024-10-04 必知的php数组函数(必知的php数组函数有哪些)
- 2024-10-04 C# 数据操作系列 - 16 SqlSugar 完结篇(最后的精华)
- 2024-10-04 会SQL语句,就能快速开放你的数据接口API
- 2024-10-04 VBA数组与字典解决方案第46讲:进行数据的模糊分类汇总
- 2024-10-04 sqlite3 支持JSON(Sqlite3 支持网络访问)
- 2024-10-04 HeidiSQL 免费的可视化数据库管理工具
- 2024-10-04 实例讲解MyBatisPlus自定义sql注入器方法
- 2024-10-04 【实用技能】Seacms 8.7版本SQL注入分析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)