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,服务器可能会意外关闭。