MySQL 中用户定义变量与过程变量的比较
MySQL 中,用户定义变量以 @
为前缀声明,而过程变量则没有前缀。这种区别源于会话特定的用户定义变量在整个会话中保持其值,而过程变量在每次过程调用时都会重新初始化为 NULL。
会话特定变量 (@variable)
带有 @
前缀的用户定义变量充当会话特定变量。它们可以使用 SET 语句或在查询中初始化,并持续到会话结束。例如:
<code class="language-sql">SET @var = 1;</code>
过程变量 (variable)
在存储过程或函数中声明的变量,没有前缀,是局部变量。这些变量仅在过程的范围内可用,并且在每次过程调用时都会重新初始化为 NULL。
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; ... END;</code>
主要区别
下表总结了 @
变量和过程变量之间的主要区别:
特性 |
@variable (会话特定) |
variable (过程变量) |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
作用域 | 持续整个会话 | 每次过程调用时重新初始化 | |||||||||
语法 | 以
|
没有前缀 |
示例
考虑以下存储过程:
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; ... END;</code>
每次调用该过程时,var2
重置为 1,而 @var2
则持续递增。这演示了过程变量的重新初始化行为以及用户定义变量的会话特定特性。
以上是MySQL 中的用户定义变量与过程变量:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!