15.7.4.1 可加载函数的 CREATE FUNCTION 语句
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()
。见添加可加载函数。
function_name
是在 SQL 语句中调用函数时使用的名称。RETURNS
子句指示函数返回值的类型。DECIMAL
在 RETURNS
后是合法的值,但当前 DECIMAL
函数返回字符串值,应该写成 STRING
函数。
IF NOT EXISTS
防止出现名称已经存在的可加载函数时的错误,但不能防止出现同名内置函数时的错误。IF NOT EXISTS
也支持 CREATE FUNCTION
语句。见函数名称解析。
如果给出 AGGREGATE
关键字,表示该函数是一个聚合(组)函数。聚合函数与native 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节,“用户自定义函数表”。
像 mysql.func
系统表一样,性能_schema 中的user_defined_functions
表中列出了使用 CREATE FUNCTION
安装的可加载函数。与 mysql.func
表不同的是,user_defined_functions
表还列出了服务器组件或插件自动安装的可加载函数。这使得user_defined_functions
比较适合检查已安装的可加载函数。
在正常启动序列中,服务器将加载注册在 mysql.func
表中的函数。如果服务器使用--skip-grant-tables
选项启动,表中的函数将不被加载且不可用。
要升级与可加载函数关联的共享库,执行DROP FUNCTION
语句,升级共享库,然后执行CREATE FUNCTION
语句。如果先升级共享库然后使用DROP FUNCTION
,服务器可能会意外关闭。