CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
此语句加载名为 function_name
的可加载函数。(CREATE FUNCTION
也用于创建存储函数;请参阅 第 15.1.17 节 “CREATE PROCEDURE 和 CREATE FUNCTION 语句”。)
可加载函数是一种使用类似于原生(内置)MySQL 函数(如 ABS()
或 CONCAT()
)的新函数扩展 MySQL 的方法。请参阅 添加可加载函数。
function_name
是应在 SQL 语句中用于调用函数的名称。RETURNS
子句指示函数返回值的类型。DECIMAL
是 RETURNS
之后的一个合法值,但目前 DECIMAL
函数返回字符串值,并且应该像 STRING
函数一样编写。
IF NOT EXISTS
可以防止在已经存在同名可加载函数时发生错误。但它不会阻止在已存在同名内置函数时发生错误。IF NOT EXISTS
也支持 CREATE FUNCTION
语句。请参阅函数名称解析。
如果给定 AGGREGATE
关键字,则表示该函数是聚合(分组)函数。聚合函数的工作方式与 MySQL 原生聚合函数完全相同,例如 SUM()
或 COUNT()
。
shared_library_name
是包含实现该函数的代码的共享库文件的基本名称。该文件必须位于插件目录中。此目录由 plugin_dir
系统变量的值指定。有关更多信息,请参阅第 7.7.1 节“安装和卸载可加载函数”。
CREATE FUNCTION
需要 mysql
系统模式的 INSERT
权限,因为它会向 mysql.func
系统表中添加一行以注册该函数。
CREATE FUNCTION
还会将该函数添加到 Performance Schema 的 user_defined_functions
表中,该表提供有关已安装可加载函数的运行时信息。请参阅第 29.12.22.10 节“user_defined_functions 表”。
与 mysql.func
系统表一样,Performance Schema 的 user_defined_functions
表列出了使用 CREATE FUNCTION
安装的可加载函数。与 mysql.func
表不同的是,user_defined_functions
表还列出了由服务器组件或插件自动安装的可加载函数。这种差异使得在检查安装了哪些可加载函数时,user_defined_functions
比 mysql.func
更可取。
在正常的启动过程中,服务器会加载 mysql.func
表中注册的函数。如果使用 --skip-grant-tables
选项启动服务器,则不会加载表中注册的函数,并且这些函数将不可用。
要升级与可加载函数关联的共享库,请发出 DROP FUNCTION
语句,升级共享库,然后发出 CREATE FUNCTION
语句。如果先升级共享库,然后再使用 DROP FUNCTION
,则服务器可能会意外关闭。