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 deNULLe um tipo de string.
SELECT @var_any_var_name
Você pode inicializar uma variável usandoSETouSELECTdemonstraçã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 emSELECTconsultas usando Técnicas avançadas de variáveis de usuário MySQL .
-
Variáveis locais (sem prefixo):
Variáveis locais precisam ser declaradas usandoDECLAREantes 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 oDEFAULTcláusula está faltando, o valor inicial éNULL.
O escopo de uma variável local é oBEGIN ... ENDbloco 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,SESSIONouBOTH.
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 VARIABLESinstruçã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 GLOBALouSET 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;