文档首页
MySQL 8.4 参考手册
相关文档 下载本手册

MySQL 8.4 参考手册  /  ...  /  用于可加载函数的 CREATE FUNCTION 语句

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())的新函数扩展 MySQL 的方法。请参阅 添加可加载函数

function_name 是应在 SQL 语句中用于调用函数的名称。RETURNS 子句指示函数返回值的类型。DECIMALRETURNS 之后的一个合法值,但目前 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 还会将该函数添加到 Performance Schema 的 user_defined_functions 表中,该表提供有关已安装可加载函数的运行时信息。请参阅第 29.12.22.10 节“user_defined_functions 表”

注意

mysql.func 系统表一样,Performance Schema 的 user_defined_functions 表列出了使用 CREATE FUNCTION 安装的可加载函数。与 mysql.func 表不同的是,user_defined_functions 表还列出了由服务器组件或插件自动安装的可加载函数。这种差异使得在检查安装了哪些可加载函数时,user_defined_functionsmysql.func 更可取。

在正常的启动过程中,服务器会加载 mysql.func 表中注册的函数。如果使用 --skip-grant-tables 选项启动服务器,则不会加载表中注册的函数,并且这些函数将不可用。

注意

要升级与可加载函数关联的共享库,请发出 DROP FUNCTION 语句,升级共享库,然后发出 CREATE FUNCTION 语句。如果先升级共享库,然后再使用 DROP FUNCTION,则服务器可能会意外关闭。