Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:@variable vs. variabile. Qual è la differenza?

MySQL ha un concetto di variabili definite dall'utente .

Sono variabili digitate liberamente che possono essere inizializzate da qualche parte in una sessione e mantengono il loro valore fino al termine della sessione.

Sono preceduti da un @ segno, in questo modo:@var

Puoi inizializzare questa variabile con un SET istruzione o all'interno di una query:

SET @var = 1

SELECT @var2 := 2

Quando sviluppi una procedura memorizzata in MySQL, puoi passare i parametri di input e dichiarare le variabili locali:

DELIMITER //

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

DELIMITER ;

Queste variabili non sono precedute da alcun prefisso.

La differenza tra una variabile di procedura e una variabile definita dall'utente specifica per la sessione è che una variabile di procedura viene reinizializzata su NULL ogni volta che viene chiamata la procedura, mentre la variabile specifica della sessione non è:

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

Come puoi vedere, var2 (variabile di procedura) viene reinizializzato ogni volta che viene chiamata la procedura, mentre @var2 (variabile specifica della sessione) non lo è.

(Oltre alle variabili definite dall'utente, MySQL anche ha alcune "variabili di sistema" predefinite, che possono essere "variabili globali" come @@global.port o "variabili di sessione" come @@session.sql_mode; queste "variabili di sessione" non sono correlate a variabili definite dall'utente specifiche della sessione.)