2012-08-01 51 views
192

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

me gustaría escribir algo como:

SET start = 1; 
SET finish = 10; 

SELECT * FROM places WHERE place BETWEEN start AND finish; 

Respuesta

337

Hay principalmente tres tipos de variables en MySQL:

  1. User-defined variables (el prefijo @):

    Usted puede acceder a cualquier variable definida por el usuario sin declararlo o initi alizing it. Si se refiere a una variable que no ha sido inicializada, tiene un valor de NULL y un tipo de cadena.

    SELECT @var_any_var_name 
    

    Puede inicializar una variable usando SET o SELECT declaración:

    SET @start = 1, @finish = 10;  
    

    o

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

    variables de usuario se puede asignar un valor a partir de un conjunto limitado de datos tipos: entero , decimal, punto flotante, cadena binaria o no binaria, o valor NULL.

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

    Se pueden utilizar en consultas SELECT utilizando Advanced MySQL user variable techniques.

  2. Local Variables (sin prefijo):

    Las variables locales tiene que ser declarada usando DECLARE antes acceder a él.

    Se pueden utilizar como variables y parámetros locales la 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 la cláusula DEFAULT no está presente, el valor inicial es NULL.

    El alcance de una variable local es el bloque BEGIN ... END dentro de que está declarado.

  3. Server System Variables (con el prefijo @@):

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

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

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

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

    Se pueden establecer en el inicio del servidor utilizando las opciones en la línea de comandos o en un archivo de opciones. La mayoría de ellos se puede cambiar dinámicamente mientras el servidor está en ejecución 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; 
    
+1

De alguna manera el operador '' '' = '' '' no funcionó para mí. Funcionó bien cuando utilicé el operador '' '': = '' ''. – divinedragon

+14

'=' el operador solo funciona en la cláusula 'SET'. Para asignar valor a una variable en la consulta 'SELECT' puede usar el operador': = 'p. Ej. 'SELECT @start: = 1' – Omesh

+2

¿Puede aclarar qué significa esto:" No es necesario declarar las variables de sesión definidas por el usuario denotados con el prefijo @ "? – billynoah

8

Uso establece o seleccione

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

ejemplo:

SELECT @price := MAX(product.price) 
FROM product 
7

SET

SET @var_name = value 

O

SET @var := value 

ambos operadores = y : = son aceptados


SELECT

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

si varios conjuntos de registros encontrados sólo el último valor de col2 es mantener (anulación);

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

en este caso el resultado de la selección no contiene valores de col2

+0

¿Cuál es la diferencia entre '=' y ': ='? –

+1

Supongo que para mysql SELECT sintaxis es necesario separar el significado de = (comparation) from: = (asign) – bortunac

2

DECLARE var_name [, var_name] ... Tipo [valor DEFAULT] Esta declaración declara variables locales dentro de los programas almacenados.

Ej. DECLARAR id INT sin firmar PREDETERMINADO 1;

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

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

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

Los nombres de las 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 alcance de una variable local es el bloque BEGIN ... END en el que se declara. La variable se puede consultar en bloques anidados dentro del bloque de declaración, excepto aquellos bloques que declaran una variable con el mismo nombre.

Cuestiones relacionadas