在我发布的另一个问题中,有人告诉我:
@variable
以及:
variable
在MySQL中.他还提到了MSSQL的批处理范围和MySQL的会话范围.有人能给我详细解释一下吗?
在我发布的另一个问题中,有人告诉我:
@variable
以及:
variable
在MySQL中.他还提到了MSSQL的批处理范围和MySQL的会话范围.有人能给我详细解释一下吗?
MySQL的概念是100.
它们是松散类型的变量,可以在会话中的某个位置初始化,并在会话结束前保持其值.
它们的前面有一个@
的标志,比如:@var
可以使用SET
语句或在查询中初始化此变量:
SET @var = 1
SELECT @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_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
如您所见,每次调用过程时,都会重新初始化var2
(过程变量),而不是@var2
(会话特定变量).
(除了用户定义的变量外,MySQL also还有一些预定义的"系统变量",可能是"全局变量",比如@@global.port
,也可能是"会话变量",比如@@session.sql_mode
;这些"会话变量"与特定于会话的用户定义变量无关.)