#### 13.7.4.1 可加载函数的 CREATE FUNCTION 语句

[](<>)[](<>)[](<>)[](<>)[](<>)

```
CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
    RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name
```

此语句加载名为的可加载函数*`函数名`*.(`创建函数`也用于创建存储函数；看[第 13.1.17 节，“CREATE PROCEDURE 和 CREATE FUNCTION 语句”](create-procedure.html).)

可加载函数是一种使用新函数扩展 MySQL 的方法，该函数类似于原生（内置）MySQL 函数，例如[`ABS()`](mathematical-functions.html#function_abs)要么[`连接（）`](string-functions.html#function_concat).看[添加可加载函数](https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-loadable-function.html).

*`函数名`*是应该在 SQL 语句中用于调用函数的名称。这`回报`子句指示函数返回值的类型。`十进制`是一个合法的价值后`回报`, 但目前`十进制`函数返回字符串值，应该写成`细绳`职能。

`如果不存在`如果已经存在同名的可加载函数，则防止发生错误。它确实*不是*如果已经存在同名的内置函数，则防止发生错误。`如果不存在`支持`创建函数`以 MySQL 8.0.29 开头的语句。也可以看看[函数名称解析](function-resolution.html#function-name-resolution).

这`总计的`如果给定关键字，则表示该函数是聚合（组）函数。聚合函数的工作方式与原生 MySQL 聚合函数完全一样，例如[`和（）`](aggregate-functions.html#function_sum)要么[`数数（）`](aggregate-functions.html#function_count).

*`shared_library_name`*是包含实现该函数的代码的共享库文件的基本名称。该文件必须位于插件目录中。该目录由[`插件目录`](server-system-variables.html#sysvar_plugin_dir)系统变量。有关详细信息，请参阅[第 5.7.1 节，“安装和卸载可加载函数”](function-loading.html).

[`创建函数`](create-function-loadable.html)需要[`插入`](privileges-provided.html#priv_insert)的特权`mysql`系统模式，因为它向`mysql.func`系统表来注册功能。

[`创建函数`](create-function-loadable.html)还将该功能添加到 Performance Schema[`用户定义函数`](performance-schema-user-defined-functions-table.html)提供有关已安装可加载函数的运行时信息的表。看[第 27.12.21.8 节，“用户\_定义\_功能表”](performance-schema-user-defined-functions-table.html).

笔记

如`mysql.func`系统表，性能模式[`用户定义函数`](performance-schema-user-defined-functions-table.html)表列出了使用安装的可加载函数[`创建函数`](create-function-loadable.html).不像`mysql.func`表[`用户定义函数`](performance-schema-user-defined-functions-table.html)表还列出了由服务器组件或插件自动安装的可加载函数。这种差异使[`用户定义函数`](performance-schema-user-defined-functions-table.html)比`mysql.func`用于检查安装了哪些可加载功能。

在正常启动过程中，服务器会加载在`mysql.func`桌子。如果服务器以[`--skip-grant-tables`](server-options.html#option_mysqld_skip-grant-tables)选项，表中注册的函数未加载且不可用。

笔记

要升级与可加载函数关联的共享库，请发出[`拖放功能`](drop-function-loadable.html)声明，升级共享库，然后发出[`创建函数`](create-function-loadable.html)陈述。如果先升级共享库再使用[`拖放功能`](drop-function-loadable.html)，服务器可能会意外关闭。
