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

MySQL:@variabel vs. variabel. Hvad er forskellen?

MySQL har et koncept med brugerdefinerede variabler .

De er løst indtastede variabler, der kan initialiseres et sted i en session og bevarer deres værdi, indtil sessionen slutter.

De er sat foran med en @ tegn som dette:@var

Du kan initialisere denne variabel med en SET sætning eller inde i en forespørgsel:

SET @var = 1

SELECT @var2 := 2

Når du udvikler en lagret procedure i MySQL, kan du videregive inputparametrene og erklære de lokale variabler:

DELIMITER //

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

DELIMITER ;

Disse variabler er ikke sat foran med nogen præfikser.

Forskellen mellem en procedurevariabel og en sessionsspecifik brugerdefineret variabel er, at en procedurevariabel geninitialiseres til NULL hver gang proceduren kaldes, mens den sessionsspecifikke variabel ikke er:

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 (procedurevariabel) geninitialiseres hver gang proceduren kaldes, mens @var2 (sessionsspecifik variabel) er ikke.

(Ud over brugerdefinerede variabler, MySQL også har nogle foruddefinerede "systemvariabler", som kan være "globale variabler", såsom @@global.port eller "sessionsvariabler" såsom @@session.sql_mode; disse "sessionsvariabler" er ikke relateret til sessionsspecifikke brugerdefinerede variabler.)



  1. Fatal fejl:Kald til udefineret funktion session_register()

  2. Generer DDL programmatisk på Postgresql

  3. SQL CREATE DATABASE Syntaks – Listet efter DBMS

  4. Hvad er forskellen mellem 'ÅÅÅÅ' og 'RRRR' i Oracle SQL