扩展 MySQL 9.0  /  为 MySQL 添加函数

第 6 章 为 MySQL 添加函数

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

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

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

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

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

注意

以前,可加载函数被称为用户定义函数 (UDF)。该术语有点用词不当,因为“用户定义”也可以应用于使用 SQL 编写的存储函数和通过修改服务器源代码添加的本机函数。

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

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

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

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

无论使用哪种方法添加函数,它都可以在 SQL 语句中像本机函数一样调用,例如 ABS()SOUNDEX()

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

以下部分介绍了可加载函数接口的特性,提供了编写可加载函数的说明,讨论了 MySQL 为防止可加载函数被滥用而采取的安全措施,以及如何添加本机 MySQL 函数。

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

注意

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