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 的一种方式,使其具有像本机(内置)MySQL 函数一样的功能,例如 ABS()
或 CONCAT()
。见 添加可加载函数。
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 节,“安装和卸载可加载函数”。
创建函数
需要 INSERT
权限以便在 mysql
系统模式下添加一行到 mysql.func
系统表中注册函数。
创建函数
也将函数添加到性能模式 user_defined_functions
表中,以提供已安装的可加载函数的运行时信息。请参阅 第 29.12.22.10 节,“用户定义函数表”。
与 mysql.func
系统表类似,性能模式 user_defined_functions
表也列出了使用 创建函数
安装的可加载函数。与 mysql.func
表不同的是,user_defined_functions
表还列出了服务器组件或插件自动安装的可加载函数。这使得 user_defined_functions
表比 mysql.func
表更适合检查哪些可加载函数已安装。
在正常启动序列中,服务器加载 mysql.func
表中的函数注册。如果服务器以 --skip-grant-tables
选项启动,表中的函数注册将不会被加载且不可用。
要升级与可加载函数关联的共享库,发出 DROP FUNCTION
语句,升级共享库,然后发出 创建函数
语句。如果您首先升级共享库,然后使用 DROP FUNCTION
,服务器可能会意外关闭。