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中文网其他相关文章!