CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
此语句加载名为 的可加载函数
function_name
。(CREATE
FUNCTION
也用于创建存储函数;参见
第 13.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
以 MySQL 8.0.29 开头的语句。另请参阅
函数名称解析。
AGGREGATE
关键字(如果给定)表示该函数是聚合(组)函数
。聚合函数的工作方式与本机 MySQL 聚合函数完全相同,例如SUM()
or
COUNT()
。
shared_library_name
是包含实现函数的代码的共享库文件的基本名称。该文件必须位于插件目录中。该目录由
plugin_dir
系统变量的值给出。有关详细信息,请参阅第 5.7.1 节,“安装和卸载可加载函数”。
CREATE
FUNCTION
需要
系统架构的INSERT
特权,
因为它向系统表添加一行以注册该函数。
mysql
mysql.func
CREATE
FUNCTION
还将函数添加到 Performance Schemauser_defined_functions
表中,该表提供有关已安装可加载函数的运行时信息。请参阅
第 27.12.21.9 节,“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
,服务器可能会意外关闭。