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
还会将该函数添加到性能架构 user_defined_functions
表中,该表提供有关已安装的可加载函数的运行时信息。请参见 第 29.12.22.10 节,“user_defined_functions 表”。
与 mysql.func
系统表类似,性能架构 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
,服务器可能会意外关闭。