可以通过三种方式向 MySQL 添加新功能:
创建一个存储函数(一种存储对象)。存储函数是使用 SQL 语句而不是通过编译目标代码编写的。此处不介绍编写存储函数的语法。请参阅使用存储例程。
创建本机(内置)MySQL 函数。通过修改 MySQL 源代码添加本机功能,将其编译到mysqld服务器中并永久可用。请参阅 第 6.1 节,“添加本机函数”。
-
使用可加载函数接口。可加载函数被编译为库文件,然后使用
CREATE FUNCTION
andDROP FUNCTION
语句从服务器动态加载和卸载。请参见 第 6.2 节,“添加可加载函数”。在某些情况下,可加载函数包含在组件或插件库文件中,并在安装或卸载组件或插件时自动加载和卸载。
可加载函数以前称为用户定义函数 (UDF)。该术语有点用词不当,因为“用户定义”也适用于使用 SQL 编写的存储函数和通过修改服务器源代码添加的本机函数。
每种创建编译函数的方法都有优点和缺点:
添加本机功能需要修改源代码分发。添加可加载函数不会;它可以添加到二进制 MySQL 发行版中,而无需访问 MySQL 源代码。
可加载函数包含在目标文件中,除了服务器本身之外,您还必须安装该文件。对于编译到服务器中的函数,这是不必要的。(这一点不适用于由组件或插件自动加载的可加载函数。)
如果升级 MySQL 发行版,则可以继续使用以前安装的可加载函数,除非升级到可加载函数接口更改的更新 MySQL 版本。对于本机功能,您必须在每次升级时重复修改源代码。
无论使用何种方法添加函数,都可以像
ABS()
或
等原生函数一样在 SQL 语句中调用SOUNDEX()
。
有关描述服务器如何解释对不同类型函数的引用的规则,请参阅 函数名称解析和解析。
以下部分描述了可加载函数接口的特性,提供了编写可加载函数的说明,讨论了 MySQL 为防止可加载函数被滥用而采取的安全预防措施,并描述了如何添加本机 MySQL 函数。
例如说明如何编写可加载函数的源代码,请查看
sql/udf_example.cc
MySQL 源代码分发中提供的文件。
MySQL 源代码包含使用 Doxygen 编写的内部文档。本文档有助于从开发人员的角度理解 MySQL 的工作原理。生成的 Doxygen 内容可在 https://mysql.net.cn/doc/index-other.html获得。也可以使用 生成 MySQL Doxygen 文档内容中的说明从 MySQL 源分发本地生成此内容。