¿Cómo declarar una variable en MySQL?


¿Cómo declarar una variable en mysql, para que mi segunda consulta pueda usarla?

Me gustaría escribir algo como:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;
 244
Author: Andrew Junzki, 2012-08-01

4 answers

Hay principalmente tres tipos de variables en MySQL:

  1. Variables definidas por el usuario (prefijadas con @):

    Puede acceder a cualquier variable definida por el usuario sin declararla o inicializándolo. Si se refiere a una variable que no ha sido inicializado, tiene un valor de NULL y un tipo de cadena.

    SELECT @var_any_var_name
    

    Puede inicializar una variable usando SET o SELECT sentencia:

    SET @start = 1, @finish = 10;    
    

    O

    SELECT @start := 1, @finish := 10;
    
    SELECT * FROM places WHERE place BETWEEN @start AND @finish;
    

    Las variables de usuario pueden recibir un valor de un conjunto limitado de datos tipos: entero, decimal, coma flotante, cadena binaria o no binaria, o valor nulo.

    Las variables definidas por el usuario son específicas de la sesión. Es decir, un usuario variable definida por un cliente no puede ser vista o utilizada por otros cliente.

    Se pueden usar en consultas SELECT usando Técnicas avanzadas de variables de usuario MySQL.

  2. Variables locales (sin prefijo) :

    Las variables locales deben ser declarado usando DECLARE antes accediendo.

    Se pueden utilizar como variables locales y los parámetros de entrada dentro de un procedimiento almacenado:

    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);
    

    Si falta la cláusula DEFAULT, el valor inicial es NULL.

    El ámbito de una variable local es el bloque BEGIN ... END dentro que se declara.

  3. Variables del sistema servidor (prefijadas con @@):

    El servidor MySQL mantiene muchas variables del sistema configuradas a un valor predeterminado. Pueden ser de tipo GLOBAL, SESSION o BOTH.

    Las variables globales afectan el funcionamiento general del servidor, mientras que las variables de sesión afectan su funcionamiento para las conexiones individuales del cliente.

    Para ver los valores actuales utilizados por un servidor en ejecución, utilice la instrucción SHOW VARIABLES o SELECT @@var_name.

    SHOW VARIABLES LIKE '%wait_timeout%';
    
    SELECT @@sort_buffer_size;
    

    Se pueden establecer al iniciar el servidor usando opciones en la línea de comandos o en un archivo de opciones. La mayoría de ellos se pueden cambiar dinámicamente mientras el servidor está corriendo usando SET GLOBAL o SET 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;
    
 425
Author: Omesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-20 13:37:55

SET

SET @var_name = value 

O

SET @var := value

Ambos operadores = y := se aceptan


SELECCIONE

SELECT col1, @var_name := col2 from tb_name WHERE "conditon";

Si se encuentran varios conjuntos de registros, solo el último valor en col2 es keep (override);

SELECT col1, col2 INTO @var_name, col3 FROM .....

En este caso el resultado de select no contiene valores col2

 14
Author: bortunac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-19 11:32:25

Use set o select

SET @counter := 100;
SELECT @variable_name := value;

Ejemplo:

SELECT @price := MAX(product.price)
FROM product 
 8
Author: KouchakYazdi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-23 17:26:03

DECLARE var_name [, var_name]... tipo [Valor predeterminado] Esta instrucción declara variables locales dentro de programas almacenados.

Ex. DECLARE id INT unsigned DEFAULT 1;

Para proporcionar un valor predeterminado para una variable, incluya una cláusula PREDETERMINADA. El valor se puede especificar como una expresión; no necesita ser una constante. Si falta la cláusula PREDETERMINADA, el valor inicial es NULL.

Las variables locales se tratan como parámetros de rutina almacenados con respecto al tipo de datos y comprobación de desbordamiento.

Las declaraciones de variables deben aparecer antes de las declaraciones del cursor o del manejador.

Los nombres de variables locales no distinguen entre mayúsculas y minúsculas. Los caracteres permitidos y las reglas de comillas son los mismos que para otros identificadores

El ámbito de una variable local es el BEGIN ... Bloque FINAL dentro del cual se declara. La variable puede ser referida en bloques anidados dentro del bloque declarante, excepto aquellos bloques que declaran una variable con el mismo nombre.

 2
Author: AJS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-19 11:40:23