gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:50:25 25 4
gpt4 key购买 nike

在我发布的另一个问题中,有人告诉我,以下之间存在区别:

@variable

和:

variable

在 MySQL 中。他还提到 MSSQL 如何具有批处理范围,MySQL 如何具有 session 范围。有人可以帮我详细解释一下吗?

最佳答案

MySQL 有一个概念 user-defined variables

它们是松散类型的变量,可以在 session 中的某个位置初始化并保留其值直到 session 结束。

它们前面带有一个@符号,如下所示:@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 ;

这些变量前面没有任何前缀。

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

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( session 特定变量)则不会。

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

关于MySQL:@变量与变量。有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52844930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com