Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:@zmienna a zmienna. Co za różnica?

MySQL ma koncepcję zmiennych zdefiniowanych przez użytkownika .

Są to zmienne o luźnym typie, które mogą być inicjowane gdzieś w sesji i zachowują swoją wartość aż do zakończenia sesji.

Są poprzedzone @ znak, na przykład:@var

Możesz zainicjować tę zmienną za pomocą SET oświadczenie lub wewnątrz zapytania:

SET @var = 1

SELECT @var2 := 2

Kiedy tworzysz procedurę składowaną w MySQL, możesz przekazać parametry wejściowe i zadeklarować zmienne lokalne:

DELIMITER //

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

DELIMITER ;

Te zmienne nie są poprzedzone żadnymi przedrostkami.

Różnica między zmienną procedury a zmienną zdefiniowaną przez użytkownika specyficzną dla sesji polega na tym, że zmienna procedury jest ponownie inicjowana do NULL za każdym razem, gdy wywoływana jest procedura, podczas gdy zmienna specyficzna dla sesji nie jest:

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 widać, var2 (zmienna procedury) jest ponownie inicjowana przy każdym wywołaniu procedury, podczas gdy @var2 (zmienna specyficzna dla sesji) nie jest.

(Oprócz zmiennych zdefiniowanych przez użytkownika MySQL również ma pewne predefiniowane „zmienne systemowe”, które mogą być „zmiennymi globalnymi”, takimi jak @@global.port lub „zmienne sesji”, takie jak @@session.sql_mode; te „zmienne sesji” nie są powiązane ze zmiennymi zdefiniowanymi przez użytkownika specyficznymi dla sesji).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Powtórz wiersz wyniku wiele razy i ponumeruj wiersze

  2. Jak napisać REST API?

  3. Co nowego w replikacji MySQL w MySQL 8.0

  4. MySQL UPDATE i SELECT w jednym przejściu

  5. Jak wyświetlić pliki dziennika w MySQL?