扩展 MySQL 8.4  /  向 MySQL 添加函数

第 6 章 添加函数到 MySQL

有三种方法可以向 MySQL 添加新函数

  • 创建存储函数(一种存储对象)。存储函数是用 SQL 语句而不是编译对象代码编写的。编写存储函数的语法不在此介绍。请参阅 使用存储例程.

  • 创建原生(内置)MySQL 函数。原生函数是通过修改 MySQL 源代码来添加的,以便将其编译到 mysqld 服务器中,并永久可用。请参阅 第 6.1 节,“添加原生函数”.

  • 使用可加载函数接口。可加载函数被编译为库文件,然后使用 CREATE FUNCTIONDROP FUNCTION 语句动态地从服务器加载和卸载。请参阅 第 6.2 节,“添加可加载函数”.

    在某些情况下,可加载函数包含在组件或插件库文件中,并在安装或卸载组件或插件时自动加载和卸载。

注意

可加载函数以前被称为用户定义函数(UDF)。这个术语有点误导,因为“用户定义”也适用于用 SQL 编写的存储函数和通过修改服务器源代码添加的原生函数。

每种创建编译函数的方法都有其优缺点

  • 添加原生函数需要修改源代码发行版。添加可加载函数不需要,它可以添加到二进制 MySQL 发行版中,无需访问 MySQL 源代码。

  • 可加载函数包含在一个对象文件中,您必须除了服务器本身之外还要安装该文件。对于编译到服务器中的函数,则不需要这样做。(这一点不适用于由组件或插件自动加载的可加载函数。)

  • 如果您升级了 MySQL 发行版,您可以继续使用以前安装的可加载函数,除非您升级到更新的 MySQL 版本,对于该版本可加载函数接口有所更改。对于原生函数,您必须在每次升级时都重复您的源代码修改。

无论使用哪种方法添加函数,都可以像使用 ABS()SOUNDEX() 这样的原生函数一样,在 SQL 语句中调用它。

有关服务器解释不同类型函数的引用规则,请参阅 函数名称解析和解析.

以下部分描述了可加载函数接口的功能,提供了编写可加载函数的说明,讨论了 MySQL 为防止可加载函数被滥用而采取的安全措施,并描述了如何添加原生 MySQL 函数。

例如,要了解如何编写可加载函数的示例源代码,请查看 MySQL 源代码发行版中提供的 sql/udf_example.cc 文件。

注意

MySQL 源代码包含使用 Doxygen 编写的内部文档。这些文档对于从开发人员的角度理解 MySQL 的工作原理很有用。生成的 Doxygen 内容可在 https://dev.mysqlserver.cn/doc/index-other.html 找到。您也可以使用 生成 MySQL Doxygen 文档内容 中的说明,从 MySQL 源代码发行版中本地生成这些内容。