mysql udf介绍_MySQL UDF 用户自定义函数-程序员宅基地

技术标签: mysql udf介绍  

MySQL 数据库除了系统提供的内置函数外,还提供了用户自定义函数的功能UDF(User defined Function)。

MySQL 服务已经提供了很多内置函数供用户使用。如果您还是有建立新函数的需求的话,可以使用UDF。

一、添加新函数的方法

1、通过用户定义的函数(UDF)接口添加函数。用户定义的函数被编译为库文件,然后使用CREATE FUNCTION和DROP FUNCTION语句动态地添加到服务器并从服务器中删除。

2、将函数添加为本地(内置)MySQL函数。原生函数被编译到 mysqld服务器中并永久可用。

3、创建存储函数。这些是使用SQL语句编写的,而不是编译目标代码。

二、用户定义函数

MySQL本身支持很多内建的函数,此外还可以通过创建存储方法来定义函数。UDF为用户提供了一种更高效的方式来创建函数。

UDF与普通函数类似,有参数,也有输出。分为两种类型:单次调用型和聚集函数。前者能够针对每一行数据进行处理,后者则用于处理Group By这样的情况。

三、为什么用UDF

既然MySQL本身提供了大量的函数,并且也支持定义函数,为什么我们还需要UDF呢?这主要基于以下几点:

1、UDF的兼容性很好,这得益于MySQL的UDF基本上没有变动

2、比存储方法具有更高的执行效率,并支持聚集函数

3、相比修改代码增加函数,更加方便简单

当然UDF也是有缺点的,这是因为UDF也处于mysqld的内存空间中,不谨慎的内存使用很容易导致mysqld crash掉。

四、编写UDF的几个API接口

UDF的部分API如下:

name_init()

在执行SQL之前会被调用,主要做一些初始化的工作,比如分配后续用到的内存、初始化变量、检查参数是否合法等。

name_deinit()

在执行完SQL后调用,大多用于内存清理等工作。init和deinit这两个函数都是可选的

name()

UDF的主要处理函数,当为单次调用型时,可以处理每一行的数据;当为聚集函数时,则返回Group by后的聚集结果。

name_add()

在每个分组中每行调用

name_clear()

在每个分组之后调用

两种UDF类型的API调用图:51b830294edb2d3a93361bc4ce0600e1.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34569101/article/details/113210645

智能推荐

【逻辑漏洞】验证码功能缺陷-程序员宅基地

文章浏览阅读698次。1.介绍验证码就是每次访问页面时随机生成的图片,内容一般是数字和字母(更BT点的有中文,现在已经升级到图片,动画等验证码),需要访问者把图中的数字字母填到表单中提交,这样就有效地防止了暴力破解。验证码也用于防止恶意灌水、广告帖等。在登陆的地方访问一个脚本文件,该文件生成含验证码的图片并将值写入到session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与session里的一致。目前常常会出现验证码失效或者被绕过的可能,也成为了当前产生web漏洞的一个问题。2.测试方法(1)登陆页面是

http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException-程序员宅基地

文章浏览阅读2.3k次。$ mvn -Dmaven.test.skip=true package[INFO] Scanning for projects...[WARNING] [WARNING] Some problems were encountered while building the effective model for com.springboot:test:jar:0.0.1-SNAPSHOT...

Vue父子组件传值 v-bind:、this.$emit、 this.list.splice(index,1)、@delete等的使用-程序员宅基地

文章浏览阅读3.6k次。点击提交:然后鼠标点击一个内容:<body> <!-- a.父组件向子组件传值:通过v-bind:的形式进行数据的传递(可直接简写为冒号) 然后子组件 使用props来接收 b.子组件向父组件传值: 局部组件TodoItem的li有handleItemClick事件 ..._this.list.splice

xt1085android7.1,【Rayner】国行XT1085刷 XT1092底包教程-程序员宅基地

文章浏览阅读610次。本帖最后由 RaynerLucius 于 2015-8-2 09:43 编辑关于如何能通刷,这个是个值得研究的问题。Moto一直以来都在各种BL验证、CID验证、等级验证方面大做手脚,手机刷错底包导致变砖!目前解锁BL后,处于同一等级的分区表可以通刷,但是必须要和bootloader匹配。不匹配可能导致直接变砖。国行解锁BL后,先要看看自己手机的分区表等级,以便刷入其他版本的底包后可以刷回去。国行..._xt1085论坛

vue3组件通信(传值、传方法)总结_vue3孙组件向父组件传递方法,不用$listeners,用什么-程序员宅基地

文章浏览阅读170次。父-onBeforeUnmount。子-onBeforeUnmount。子-onUnmounted。父-onUnmounted。_vue3孙组件向父组件传递方法,不用$listeners,用什么

【九度OJ】题目1018:统计同成绩学生人数 解题报告_输入 测试输入包含若干测试用例,每个测试用例的格式为 第1行:n 第2行:n名学生的成-程序员宅基地

文章浏览阅读1k次。【九度OJ】题目1054:字符串内排序 解题报告标签(空格分隔): 九度OJ[LeetCode]http://ac.jobdu.com/problem.php?pid=1018题目描述:读入N名学生的成绩,将获得某一给定分数的学生人数输出。输入:测试输入包含若干测试用例,每个测试用例的格式为第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔。 第3行:给定分数当读到N=0时输入结束。其_输入 测试输入包含若干测试用例,每个测试用例的格式为 第1行:n 第2行:n名学生的成

随便推点

CEF - F12调用控制台窗口_cef showdevtools-程序员宅基地

文章浏览阅读4.9k次。基于CEF3封装出的浏览器外壳程序,在实际使用中,需要调试前端的信息。所以需要调用控制台窗口,对打包的项目进行调试。实现方法通过两步实现。第一步捕获键盘F12消息类型;第二步调用ShowDevTools方法。捕获F12消息类型继承cefkeyboard_handler组件,重写OnPreKeyEvent方法实现ShowDevTools具体实现方法如下,这也是项目中实际使用的逻辑。控制台窗口作为独立的窗口弹出显示void CustomClient::ShowDevToo._cef showdevtools

使用 Prow 实现 GitOps 与 ChatOps_prow deploy-程序员宅基地

文章浏览阅读1.1k次。本篇文章将对 Prow 进行基本的介绍,并根据架构对其中的工作原理逐一讲解。之后再引导大家如何在 Kubernetes 环境中部署使用 Prow。Prow 介绍Prow 是基于 Kubernetes 的 CI/CD 系统。它能够对各种类型的事件进行触发,并向不同的服务报告状态。与此同时,它还为 GitHub 自动化实现了策略增强、ChatOps(如 /foo 风格的命令)以及自动化合并 PR等功能。目前 Kubernetes、Istio、Prometheus 等 CNCF 项目都使用 Prow 进行开_prow deploy

STM32_PWM呼吸灯_呼吸灯是什么波-程序员宅基地

文章浏览阅读2.2w次,点赞94次,收藏645次。1、什么叫呼吸灯?由亮到暗逐渐变化,很有节奏感地一起一伏,感觉好像人在呼吸,当手机收到消息,屏幕上的指示灯会渐变,比较显眼,能起到一个通知提醒的作用,其实这就一个呼吸灯。(备注:现在由于手机都在往全面屏发展,因此很多手机取消了呼吸灯这一功能,取而代之的是息屏显示)2、什么是PWM?PWM:Pulse Width Modulation,脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。可以将PWM理解为:对脉冲信号的处理技术。这里的“处理”指就的是改变占空比,从而改变最_呼吸灯是什么波

python创建和删除空文件或小文件_python 删除大小为0的文件-程序员宅基地

文章浏览阅读8.8k次。#!/usr/bin/python#-*-coding:utf-8-*- #指定编码格式,python默认unicode编码 import osdirectory = "./dir"os.chdir(directory) #切换到directory目录cwd = os.getcwd() #获取当前目录即dir目录下print("-------------------..._python 删除大小为0的文件

前馈神经网络与反向传播算法-程序员宅基地

文章浏览阅读2.7k次。欢迎关注”生信修炼手册”!在单层感知器的基础上,引入隐藏层即可得到多层感知器和深度神经网络,结构如下在上述网络中,信号从输入层开始,经过线性组合和激活函数的处理,输入到下一层的神经元,信号...

小飞鱼通达二开 OA工作流打印次数统计控制程序(图文)_oa流程批量打印-程序员宅基地

文章浏览阅读629次。每个工作流工作打印了多少次了,在OA里不知道,如何能够控制呢,今天小飞鱼带给大家的就是这个工作量打印次数统计控制程序,使用起来是不是会方便很多。可以查询打印日志明细。打印页面上多了一个打印按钮和流水号、打印次数的信息。 点击打印按钮后,弹出打印预览界面可以进行打印。并且打印按钮消失不能重复进行打印,打印计数进行记录。看图不过瘾,来段视频看一下https://..._oa流程批量打印