Existem basicamente três tipos de variáveis no MySQL:
-
Variáveis definidas pelo usuário (prefixado com@
):
Você pode acessar qualquer variável definida pelo usuário sem declará-la ou iniciá-la. Se você se referir a uma variável que não foi inicializada, ela terá um valor deNULL
e um tipo de string.
SELECT @var_any_var_name
Você pode inicializar uma variável usandoSET
ouSELECT
demonstração:
SET @start = 1, @finish = 10;
ou
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
As variáveis de usuário podem receber um valor de um conjunto limitado de tipos de dados:inteiro, decimal, ponto flutuante, string binária ou não binária ou valor NULL.
As variáveis definidas pelo usuário são específicas da sessão. Ou seja, uma variável de usuário definida por um cliente não pode ser vista ou usada por outros clientes.
Eles podem ser usados emSELECT
consultas usando Técnicas avançadas de variáveis de usuário MySQL .
-
Variáveis locais (sem prefixo):
Variáveis locais precisam ser declaradas usandoDECLARE
antes de acessá-lo.
Eles podem ser usados como variáveis locais e parâmetros de entrada dentro de um procedimento armazenado:
DELIMITER // CREATE PROCEDURE sp_test(var1 INT) BEGIN DECLARE start INT unsigned DEFAULT 1; DECLARE finish INT unsigned DEFAULT 10; SELECT var1, start, finish; SELECT * FROM places WHERE place BETWEEN start AND finish; END; // DELIMITER ; CALL sp_test(5);
Se oDEFAULT
cláusula está faltando, o valor inicial éNULL
.
O escopo de uma variável local é oBEGIN ... END
bloco dentro do qual é declarado.
-
Variáveis de sistema do servidor (prefixado com@@
):
O servidor MySQL mantém muitas variáveis de sistema configurado para um valor padrão.Eles podem ser do tipoGLOBAL
,SESSION
ouBOTH
.
As variáveis globais afetam a operação geral do servidor, enquanto as variáveis de sessão afetam sua operação para conexões de clientes individuais.
Para ver os valores atuais usados por um servidor em execução, use oSHOW VARIABLES
instrução ouSELECT @@var_name
.
SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;
Eles podem ser definidos na inicialização do servidor usando opções na linha de comando ou em um arquivo de opções. A maioria deles pode ser alterada dinamicamente enquanto o servidor está em execução usandoSET GLOBAL
ouSET SESSION
:
-- Syntax to Set value to a Global variable: SET GLOBAL sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000; -- Syntax to Set value to a Session variable: SET sort_buffer_size=1000000; SET SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@local.sort_buffer_size=10000;