如何解决MySQL:@variable 与变量有什么不同?
MySQL 有一个 用户定义变量 的概念。
它们是松散类型的变量,可以在会话中的某处初始化并保持其值直到会话结束。
它们前面带有一个@
标志,如下所示:@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
每次调用过程时都会重新初始化 (procedure variable),而@var2
(session-specific
variable) 则不会。
(除了用户定义的变量,MySQL 还有
一些预定义的“系统变量”,可能是“全局变量”如@@global.port
或“会话变量”如@@session.sql_mode
;这些“会话变量”与会话特定的用户定义无关变量。)
解决方法
在我发布的另一个问题中,有人告诉我,两者之间存在差异:
@variable
和:
variable
在 MySQL 中。他还提到了 MSSQL 如何具有批处理范围而 MySQL 具有会话范围。有人可以为我详细说明一下吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。