sql >> Databáze >  >> RDS >> Mysql

MySQL:@proměnná vs. proměnná. Jaký je v tom rozdíl?

MySQL má koncept uživatelsky definovaných proměnných .

Jsou to volně napsané proměnné, které mohou být inicializovány někde během relace a uchovávají si svou hodnotu až do konce relace.

Před nimi je znak @ podepsat takto:@var

Tuto proměnnou můžete inicializovat pomocí SET příkazu nebo uvnitř dotazu:

SET @var = 1

SELECT @var2 := 2

Když vyvíjíte uloženou proceduru v MySQL, můžete předat vstupní parametry a deklarovat lokální proměnné:

DELIMITER //

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

DELIMITER ;

Před těmito proměnnými nejsou žádné předpony.

Rozdíl mezi proměnnou procedury a uživatelsky definovanou proměnnou specifickou pro relaci je v tom, že proměnná procedury je znovu inicializována na NULL pokaždé, když je procedura volána, zatímco proměnná specifická pro relaci není:

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

Jak můžete vidět, var2 (proměnná procedury) se znovu inicializuje při každém volání procedury, zatímco @var2 (proměnná specifická pro relaci) není.

(Kromě uživatelsky definovaných proměnných, MySQL také má některé předdefinované "systémové proměnné", což mohou být "globální proměnné", jako je @@global.port nebo "proměnné relace" jako @@session.sql_mode; tyto "proměnné relace" nesouvisí s proměnnými definovanými uživatelem pro danou relaci.)



  1. Vložení DEFAULT hodnoty do sloupce, když je parametr NULL

  2. Materializované zobrazení vs. tabulky:Jaké jsou výhody?

  3. ORA-00257:Chyba archivátoru. Připojte pouze interní, dokud se neuvolní.

  4. Zjistěte, do kterého čtvrtletí v Oracle patří datum