Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:@variable vs. variável. Qual é a diferença?


O MySQL tem um conceito de variáveis ​​definidas pelo usuário .

Elas são variáveis ​​de tipo flexível que podem ser inicializadas em algum lugar em uma sessão e mantêm seu valor até que a sessão termine.

Eles são prefixados com um @ assinar, assim:@var

Você pode inicializar esta variável com um SET declaração ou dentro de uma consulta:
SET @var = 1

SELECT @var2 := 2

Ao desenvolver um procedimento armazenado no MySQL, você pode passar os parâmetros de entrada e declarar as variáveis ​​locais:
DELIMITER //

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

DELIMITER ;

Essas variáveis ​​não são prefixadas com nenhum prefixo.

A diferença entre uma variável de procedimento e uma variável definida pelo usuário específica da sessão é que uma variável de procedimento é reinicializada para NULL cada vez que o procedimento é chamado, enquanto a variável específica da sessão não é:
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

Como você pode ver, var2 (variável de procedimento) é reinicializado cada vez que o procedimento é chamado, enquanto @var2 (variável específica da sessão) não é.

(Além das variáveis ​​definidas pelo usuário, o MySQL também tem algumas "variáveis ​​de sistema" predefinidas, que podem ser "variáveis ​​globais", como @@global.port ou "variáveis ​​de sessão", como @@session.sql_mode; essas "variáveis ​​de sessão" não estão relacionadas a variáveis ​​definidas pelo usuário específicas da sessão.)