MySQL:@variable与变量。有什么不同?

【字号: 作者:雯心浏览:57日期:2024-01-15
如何解决MySQL:@variable与变量。有什么不同??

MysqL具有 用户定义变量 的概念。

它们是松散类型的变量,可以在会话的某处初始化,并保持其值直到会话结束。

它们前面带有一个@标志,如下所示:@var

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

SET @var = 1SELECT @var2 := 2

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

DELIMITER //CREATE PROCEDURE prc_test (var INT)BEGIN DECLARE var2 INT; SET var2 = 1; SELECT var2;END;//DELIMITER ;

这些变量不带任何前缀。

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

CREATE PROCEDURE prc_test ()BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; SELECT var2, @var2;END;SET @var2 = 1;CALL prc_@R_502_4867@;var2 @var2--- ---2 2CALL prc_@R_502_4867@;var2 @var2--- ---2 3CALL prc_@R_502_4867@;var2 @var2--- ---2 4

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

(除了用户定义的变量外,MysqL 还具有一些预定义的“系统变量”,可以是“全局变量”,例如@@global.port或“会话变量”,例如@@session.sql_mode;这些“会话变量”与特定于会话的用户定义无关变量。)

解决方法

在另一个问题中,我发布了一个人告诉我,两者之间是有区别的:

@variable

和:

variable

在MySQL中。他还提到了MSSQL如何具有批处理范围,而MySQL如何具有会话范围。有人可以为我详细说明吗?

相关文章: