首页 >数据库 >mysql教程 >MySQL 变量:`@variables` 和过程变量之间有什么区别?

MySQL 变量:`@variables` 和过程变量之间有什么区别?

Patricia Arquette
Patricia Arquette原创
2025-01-21 13:46:09561浏览

MySQL Variables: What's the Difference Between `@variables` and Procedure Variables?

MySQL 用户定义变量:@variables 与过程变量

MySQL 提供用户定义的变量,由前导 @ 符号(例如 @myVar)表示。 这些 @variables 是会话范围的;它们在会话中初始化并持续到会话结束。 至关重要的是,它们与过程变量不同。

@variables不同,过程变量是存储过程的本地变量。 每次调用过程时,其局部变量都会重新初始化为NULL。这与 @variables 形成鲜明对比,后者在同一会话内的多个过程调用中保留其值。 修改过程内的 @variable 会影响该会话中后续调用的值。

区分 @variables 和过程变量与 MySQL 的系统变量也很重要。系统变量可以是全局变量(例如 @@global.port),也可以是会话范围的变量(例如 @@session.sql_mode)。 会话系统变量虽然特定于会话,但其行为与 @variables.

不同

让我们来说明一下区别:

<code class="language-sql">CREATE PROCEDURE prc_test ()
BEGIN
    DECLARE myProcVar INT DEFAULT 1;
    SET myProcVar = myProcVar + 1;
    SET @myUserVar = @myUserVar + 1;
    SELECT myProcVar, @myUserVar;
END;

SET @myUserVar = 1;

CALL prc_test();
CALL prc_test();
CALL prc_test();</code>

输出将显示:

<code>myProcVar  @myUserVar
---------  ----------
2           2
2           3
2           4</code>

观察到 myProcVar(过程变量)在每次调用时重置为 2,而 @myUserVar(用户定义变量)累积递增,在调用过程中保留其值。

这种理解对于有效使用 MySQL 变量至关重要。 @variables 管理会话数据,过程变量处理本地过程状态,系统变量控制数据库环境。

以上是MySQL 变量:`@variables` 和过程变量之间有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn