sql >> Databasteknik >  >> RDS >> Mysql

MySQL:@variabel vs variabel. Vad är skillnaden?

MySQL har ett koncept med användardefinierade variabler .

De är löst skrivna variabler som kan initieras någonstans i en session och behålla sitt värde tills sessionen slutar.

De är infogade med en @ tecken, så här:@var

Du kan initiera denna variabel med en SET uttalande eller inuti en fråga:

SET @var = 1

SELECT @var2 := 2

När du utvecklar en lagrad procedur i MySQL kan du skicka indataparametrarna och deklarera de lokala variablerna:

DELIMITER //

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

DELIMITER ;

Dessa variabler har inte några prefix.

Skillnaden mellan en procedurvariabel och en sessionsspecifik användardefinierad variabel är att en procedurvariabel återinitieras till NULL varje gång proceduren anropas, medan den sessionsspecifika variabeln inte är:

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

Som du kan se, var2 (procedurvariabel) återinitieras varje gång proceduren anropas, medan @var2 (sessionsspecifik variabel) är det inte.

(Förutom användardefinierade variabler, MySQL även har några fördefinierade "systemvariabler", som kan vara "globala variabler" såsom @@global.port eller "sessionsvariabler" som @@session.sql_mode; dessa "sessionsvariabler" är inte relaterade till sessionsspecifika användardefinierade variabler.)



  1. C#:Objekt kan inte castas från DbNull till andra typer

  2. "VARNING:Felmatchning hittades mellan sl_table och pg_class." i Slony-I

  3. MySQL vs. MariaDB:vad du behöver veta

  4. Hur man felsöker MySQL-databasproblem