MySQL 存储函数

2025年3月17日 | 阅读 3 分钟

MySQL 存储函数是一组 SQL 语句,用于执行某些任务/操作并返回单个值。它是 MySQL 中存储程序的一种类型。创建存储函数时,请确保您拥有 CREATE ROUTINE 数据库权限。通常,我们使用此函数来封装可重用于存储程序或 SQL 语句的常见业务规则或公式。

存储函数几乎与 MySQL 中的存储过程相似,但它有一些区别,如下所示:

  • 函数参数只能包含 IN 参数,不能指定此参数,而存储过程可以允许 IN、OUT、INOUT 参数
  • 存储函数只能返回函数头中定义的单个值。
  • 存储函数也可以在 SQL 语句中调用。
  • 它可能不会产生结果集。

因此,当我们的程序目的仅用于计算和返回单个值或创建用户定义函数时,我们将考虑存储函数。

在 MySQL 中创建存储函数的语法如下:

使用的参数

存储函数语法使用以下参数,如下所述:

参数名称描述
fun_name这是我们要在数据库中创建的存储函数的名称。它不应与 MySQL 的内置函数名称相同。
fun_parameter它包含函数体使用的参数列表。它不允许指定 IN、OUT、INOUT 参数。
datatype这是函数的返回值的数据类型。它应该是任何有效的 MySQL 数据类型。
characteristicsCREATE FUNCTION 语句仅在声明中定义了 characteristics(DETERMINISTIC、NO SQL 或 READS SQL DATA)时才被接受。
fun_body此参数包含一组用于执行操作的 SQL 语句。它至少需要一个 RETURN 语句。当 RETURN 语句执行时,函数将自动终止。函数体如下: BEGIN -- SQL statements END $$ DELIMITER

MySQL 存储函数示例

让我们通过一个示例来理解存储函数在 MySQL 中的工作原理。假设我们的数据库有一个名为 "customer" 的表,其中包含以下数据:

MySQL Stored Function

现在,我们将使用以下语句创建一个函数,该函数根据 年龄 返回 客户职业

在命令行工具上执行上述语句,如下所示:

MySQL Stored Function

函数创建成功后,我们可以在 MySQL Workbench 的“函数”部分看到它,如下面的图片所示:

MySQL Stored Function

我们还可以使用以下语句查看当前数据库中所有可用的存储函数:

执行上述命令后,我们将得到如下输出:

MySQL Stored Function

存储函数调用

现在,我们将看到存储函数如何与 SQL 语句一起调用。以下语句使用 customer_occupation 存储函数来获取结果:

这将产生如下输出:

MySQL Stored Function

我们也可以在另一个存储程序(如存储过程、函数或触发器或其他 MySQL 内置函数)中调用上述函数。

存储过程中的存储函数调用

在这里,我们将看到此函数如何在存储过程中调用。此语句在数据库中创建一个存储过程,该存储过程使用 Customer_Occupation() 存储函数。

可以使用以下语句调用存储过程:

我们将得到以下输出:

MySQL Stored Function