MySQL:@变量vs.变量。有什么区别?

在我发布的另一个问题中,有人告诉我:

@变量

以及:

变量

在MySQL中。他还提到了MSSQL如何具有批处理作用域和MySQL如何具有会话作用域。有人能给我详细解释一下吗

MySQL有一个用户定义变量的概念

它们是松散类型的变量,可以在会话中的某个位置初始化,并在会话结束前保持其值

它们前面有一个@符号,如下所示:@var

您可以使用SET语句或在查询中初始化此变量:

设置@var=1
选择@var2:=2

在MySQL中开发存储过程时,可以传递输入参数并声明局部变量:

分隔符//
创建程序prc_测试(var INT)
开始
声明var2 INT;
设置var2=1;
选择var2;
终止
//
定界符;

这些变量没有任何前缀

过程变量和特定于会话的用户定义变量之间的区别在于,每次调用过程时,过程变量都会重新初始化为NULL,而特定于会话的变量不是:

创建程序prc\U测试()
开始
声明var2 INT DEFAULT 1;
设置var2=var2+1;
设置@[email protected]+1;
选择var2,@var2;
终止
设置@var2=1;
调用prc_test();
[email protected]
— —
2 2
调用prc_test();
[email protected]
— —
2 3
调用prc_test();
[email protected]
— —
2 4

如您所见,var2(过程变量)在每次调用过程时都会重新初始化,而@var2(会话特定变量)则不会

(除了用户定义的变量外,MySQL还有一些预定义的“系统变量”,它们可能是“全局变量”,如@@global.port或“会话变量”,如@@session.sql”;这些“会话变量”与特定于会话的用户定义变量无关)

发表评论