迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中创建一个函数

作者:迹忆客 最近更新:2023/05/07 浏览次数:

本篇文章介绍了如何在 MySQL 中创建函数。 它首先解释语法,然后使用示例表创建一个函数。


在 MySQL 中创建一个函数

我们可以向其传递一个或多个参数并获得返回值的存储程序称为函数。 它有一组SQL语句来完成一些任务并输出一个值。

以下是创建 MySQL 函数的语法。

CREATE FUNCTION functionName(parameter1, parameter2, ..)
          RETURN dataType [characteristics]
          function_body

这里,function_body 包含了完成一个操作或任务的SQL语句。 它的结构如下所示。

BEGIN
    MySQL Statements
    RETURN Expression
END

这是创建函数的完整语法。

DELIMITER ;;

CREATE FUNCTION functionName(parameter1,parameter2,…)
    RETURNS datatype
    [NOT] DETERMINISTIC

BEGIN
    MySQL Statements
    RETURN Expression
END ;;

DELIMITER ;

在上面的语法中,我们正在做以下事情。

  1. 重新设置分隔符,使所有语句都不能单独执行。
  2. 在 CREATE FUNCTION 关键字之后写下函数的名称。
  3. 将所有参数写在函数名后的括号内。 我们不能给参数指定名为 INOUT、IN 或 OUT 的修饰符,但它们(所有参数)默认都是 IN 参数。
  4. 写入有效的返回数据类型。
  5. 指定函数是否使用/不使用 DETERMINISTIC。 如果我们不写 NOT DETERMINISTIC/DETERMINISTIC 关键字,MySQL 服务器将使用 NOT DETERMINISTIC。
  6. 在 BEGIN 和 END 块之间编写主要代码。 在函数体中,我们至少需要写一条 RETURN 语句。
  7. 最后,将分隔符更改为其默认值 ;。

让我们准备一个名为 users 的表,它有两个属性,ID 和 CREDIT,其中 ID 是主键。 以下查询可用于创建和填充用户表。

示例代码:

# create a table
CREATE TABLE users (
      ID INT NOT NULL AUTO_INCREMENT,
      CREDIT INT NOT NULL,
      PRIMARY KEY (id)
);

# insert data
INSERT INTO users (CREDIT) VALUES (5000);
INSERT INTO users (CREDIT) VALUES (4000);
INSERT INTO users (CREDIT) VALUES (3000);
INSERT INTO users (CREDIT) VALUES(1000);

# display data
SELECT * FROM users;

输出:

+----+--------+
| ID | CREDIT |
+----+--------+
|  1 |   5000 |
|  2 |   4000 |
|  3 |   3000 |
|  4 |   1000 |
+----+--------+
4 rows in set (0.00 sec)

我们编写以下函数来根据 CREDIT 决定 userLevel。 请参阅下面给出的代码示例。

示例代码:

DELIMITER ;;

CREATE FUNCTION UserLevels(
    credit DECIMAL(10,2)
)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
    DECLARE userLevel VARCHAR(20);

    IF credit >= 5000 THEN
        SET userLevel = 'PLATINUM';
    ELSEIF (credit >= 4000 AND
            credit < 5000) THEN
        SET userLevel = 'GOLD';
    ELSEIF (credit > 1000 AND credit < 4000 ) THEN
        SET userLevel = 'SILVER';
    ELSE
        SET userLevel = 'BASIC';
    END IF;

    RETURN (userLevel);
END;;
DELIMITER ;

创建函数后,使用以下查询调用该函数。

SELECT ID,CREDIT, UserLevels(CREDIT) AS USER_LEVEL
FROM users;

输出:

+----+--------+------------+
| ID | CREDIT | USER_LEVEL |
+----+--------+------------+
|  1 |   5000 | PLATINUM   |
|  2 |   4000 | GOLD       |
|  3 |   3000 | SILVER     |
|  4 |   1000 | BASIC      |
+----+--------+------------+
4 rows in set (0.06 sec)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便