MySQL 中的用户定义变量与局部变量?

2023年 9月 7日 68.3k 0

MySQL 中的用户定义变量与局部变量?

用户定义的变量也称为会话特定变量。它是一种松散类型变量,可以在会话中的某个位置进行初始化,并包含用户定义变量的值,直到会话结束。

用户定义变量以符号 @ 为前缀。例如:

@anyVariableName;

登录后复制

有两种方法可以初始化用户定义的变量。您可以使用 SET 命令或使用 SELECT 查询。第一种方法如下:

SET @anyVariableName=anyValue;

登录后复制

第二种方法如下:

SELECT @anyVariableName :=anyValue;

登录后复制

如果您在 SELECT 查询中不使用冒号 (:),则会将其计算为表达式。结果要么为真,要么为假:

mysql> select @m=10;

登录后复制

以下是输出:

+-------+
| @m=10 |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)

登录后复制

局部变量可以在存储过程、函数等中使用,与DECLARE关键字一起使用。不需要像用户定义变量那样的@前缀。

局部变量的语法如下。

DECLARE yourVariableName dataType;

登录后复制

注意:局部变量和用户定义变量之间的主要区别在于,每次调用存储过程时,局部变量都会用 NULL 值重新初始化,而会话特定变量或用户定义变量则不会。未使用 NULL 重新初始化。一个用户设置的用户定义变量不能被其他用户看到。给定用户的任何会话变量都会在用户退出时自动销毁。

这里是会话特定变量和局部变量的演示与存储过程。创建带有局部变量和用户定义变量的存储过程的查询如下:

mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo()
-> BEGIN
-> DECLARE localVariable int default 10;
-> SET localVariable=localVariable+10;
-> SET @userVariable=@userVariable+10;
-> SELECT localVariable;
-> SELECT @userVariable;
-> END;
-> //
Query OK, 0 rows affected (0.39 sec)
mysql> DELIMITER ;

登录后复制

现在设置用户定义变量的值。查询如下:

mysql> SET @userVariable=10;
Query OK, 0 rows affected (0.00 sec)

登录后复制

现在调用存储过程。第一次调用时,用户定义变量为 10+10=20,局部变量为 10+10=20。

使用 call 命令调用存储过程:

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

登录后复制登录后复制

以下是输出:

+---------------+
| localVariable |
+---------------+
| 20 |
+---------------+
1 row in set (0.32 sec)
+---------------+
| @userVariable |
+---------------+
| 20 |
+---------------+
1 row in set (0.34 sec)
Query OK, 0 rows affected (0.36 sec)

登录后复制

在第二次调用中,用户定义的变量将保存值 20 并添加 10,如 20+10=30,而局部变量再次用 10 重新初始化并添加 10,如 10+10=20。

调用存储过程并检查示例输出:

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

登录后复制登录后复制

以下是输出:

+---------------+
| localVariable |
+---------------+
| 20 |
+---------------+
1 row in set (0.00 sec)
+---------------+
| @userVariable |
+---------------+
| 30 |
+---------------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.02 sec)

登录后复制

在第三次调用中,用户定义的变量将保存值 30 并添加 10,如 30+10=40,而局部变量再次使用 10 重新初始化并添加 10,如 10+10=20。

现在你可以说,在每个过程调用中,局部变量都用某个值重新初始化,该值可能是 NULL 或其他值,就像在我的例子中,我提供了默认值 10。这意味着它将局部变量设置为值 10每个过程调用,而用户定义的变量则不然。

以上就是MySQL 中的用户定义变量与局部变量?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论