sql >> Database >  >> RDS >> Mysql

MySQL:@variabele versus variabele. Wat is het verschil?

MySQL heeft een concept van door de gebruiker gedefinieerde variabelen .

Het zijn losjes getypte variabelen die ergens in een sessie kunnen worden geïnitialiseerd en hun waarde behouden totdat de sessie eindigt.

Ze worden voorafgegaan door een @ teken, zoals dit:@var

U kunt deze variabele initialiseren met een SET statement of in een query:

SET @var = 1

SELECT @var2 := 2

Wanneer u een opgeslagen procedure in MySQL ontwikkelt, kunt u de invoerparameters doorgeven en de lokale variabelen declareren:

DELIMITER //

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

DELIMITER ;

Deze variabelen worden niet voorafgegaan door voorvoegsels.

Het verschil tussen een procedurevariabele en een sessiespecifieke, door de gebruiker gedefinieerde variabele is dat een procedurevariabele opnieuw wordt geïnitialiseerd tot NULL elke keer dat de procedure wordt aangeroepen, terwijl de sessiespecifieke variabele niet:

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

Zoals je kunt zien, var2 (procedurevariabele) wordt elke keer dat de procedure wordt aangeroepen opnieuw geïnitialiseerd, terwijl @var2 (sessiespecifieke variabele) niet.

(Naast door de gebruiker gedefinieerde variabelen, MySQL ook heeft een aantal vooraf gedefinieerde "systeemvariabelen", die "algemene variabelen" kunnen zijn, zoals @@global.port of "sessievariabelen" zoals @@session.sql_mode; deze "sessievariabelen" zijn niet gerelateerd aan sessiespecifieke, door de gebruiker gedefinieerde variabelen.)



  1. Een meer geavanceerd model maken met gebruikers-, thread- en poststatussen

  2. MySQL Python installeren op Mac OS X

  3. verschil tussen localhost en postgres voor host in docker

  4. Hybride OLTP/Analytics-databaseworkloads in Galera-cluster met behulp van asynchrone slaves