Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:@Variable vs. Variable. Was ist der Unterschied?

MySQL hat ein Konzept von benutzerdefinierten Variablen .

Sie sind lose typisierte Variablen, die irgendwo in einer Sitzung initialisiert werden können und ihren Wert behalten, bis die Sitzung endet.

Ihnen wird ein @ vorangestellt wie folgt:@var

Sie können diese Variable mit einem SET initialisieren -Anweisung oder innerhalb einer Abfrage:

SET @var = 1

SELECT @var2 := 2

Wenn Sie eine gespeicherte Prozedur in MySQL entwickeln, können Sie die Eingabeparameter übergeben und die lokalen Variablen deklarieren:

DELIMITER //

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

DELIMITER ;

Diesen Variablen werden keine Präfixe vorangestellt.

Der Unterschied zwischen einer Prozedurvariablen und einer sitzungsspezifischen benutzerdefinierten Variablen besteht darin, dass eine Prozedurvariable auf NULL reinitialisiert wird jedes Mal, wenn die Prozedur aufgerufen wird, während die sitzungsspezifische Variable nicht:

ist
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

Wie Sie sehen können, var2 (Prozedurvariable) wird bei jedem Aufruf der Prozedur neu initialisiert, während @var2 (sitzungsspezifische Variable) ist nicht.

(Neben benutzerdefinierten Variablen kann MySQL auch hat einige vordefinierte "Systemvariablen", die "globale Variablen" sein können, wie @@global.port oder "Sitzungsvariablen" wie @@session.sql_mode; diese "Sitzungsvariablen" haben nichts mit sitzungsspezifischen benutzerdefinierten Variablen zu tun.)