可以通过三种方式向 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 源代码分发中提供的文件。