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

MySQL 9.0 参考手册  /  ...  /  可加载函数的 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 还会将该函数添加到性能架构 user_defined_functions 表中,该表提供有关已安装的可加载函数的运行时信息。请参见 第 29.12.22.10 节,“user_defined_functions 表”

注意

mysql.func 系统表类似,性能架构 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,服务器可能会意外关闭。