Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.7 数据库管理语句  / 13.7.4 组件、插件和可加载函数语句  /  13.7.4.1 可加载函数的 CREATE FUNCTION 语句

13.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也用于创建存储函数;参见 第 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特权, 因为它向系统表添加一行以注册该函数。 mysqlmysql.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_functionsmysql.func检查安装了哪些可加载功能更可取。

在正常的启动序列中,服务器加载mysql.func表中注册的函数。如果服务器以该 --skip-grant-tables选项启动,则表中注册的功能不会加载且不可用。

笔记

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