一点分享Mysql高级特性自定义函数

前述3篇文章已经分享了Mysql的高级特性:窗口函数、wit通用表达式和json函数,本文将继续分前述3篇文章已经分享了Mysql的高级特性:窗口函数、wit通用表达式和json函数,本文将继续分享高级特性,自定义函数,分三部分呈现:

第一部分,介绍Mysql的自定义函数。

第二部分,实战,解决问题。

第三部分,总结。

一、自定义函数

通常编程语言中的函数是必备技能,不管是面向对象还是面向过程,都离不开函数。Mysql中也有函数功能,常用的是内置函数(built-infunctions),自定义函数功能也要学会,很实用。

1、创建函数

下面2个简单的实例找下整体的定义感觉。

1.1无参函数

1.2有参函数

函数的括号里有参数。

2、声明

函数定义必须声明方式,否则会报错。截取官方文档中的说明:

Whenyoucreateastoredfunction,youmustdeclareeitherthatitisdeterministicorthatitdoesnotmodifydata.Otherwise,itmaybeunsafefordatarecoveryorreplication.Bydefault,foraCREATEFUNCTIONstatementtobeaccepted,atleastoneofDETERMINISTIC,NOSQL,orREADSSQLDATAmustbespecifiedexplicitly.Otherwiseanerroroccurs:

ERROR(HY):ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wanttousethelesssafelog_bin_trust_function_creatorsvariable)

3、复杂函数体

在函数体body中,可以实现复杂的逻辑,这样就把很多不断重复做的查询统计预先定义好,直接调用函数即可。

函数体中的语法更丰富,相当于就是编程语言,有控制、逻辑、分析、流程、变量等。之前分享的语法也可以运用中body中。

3、函数的增删改查

数据表通常说增删改查,函数也有这个说法,谁让是自定义的呢,不让改和删还了得。

3.1增

在上面已经呈现。

3.2查列表

3.3查定义

3.4删

3.3改

官方文档显示,不允许修改,所以只能先删再建。

Forstoredproceduresandfunctionsandfortriggers,youmustdroptheobjectandre-createittoassignadifferentDEFINERaccount.

查到原来定义,修改好,删掉原来的函数,再执行新增修改后的函数。

二、实战

1、类数组转为json数组

继续之前案例,这样就方便很多了。在同一个分析主题内,f_json()函数会让sql清爽许多。

2、计算字符中匹配字符的个数

这也是此前案例中用到的场景,补充了字符函数的缺失功能——字符计数。

三、总结

(1)函数,把复杂的逻辑封装起来,直接调用,会使sql看起来清爽许多。

(2)笔者,常常唠叨的就是,重复操作的一定要封装为函数(不过用的R语言,后续也有R专栏)。

(3)使用自定义函数,就不得不提存储过程。


转载请注明:http://www.aierlanlan.com/grrz/4372.html