¿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;
¿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;
Respuestas:
Existen principalmente tres tipos de variables en MySQL:
Variables definidas por el usuario (con el prefijo @):
Puede acceder a cualquier variable definida por el usuario sin declararla o inicializarla. Si hace referencia a una variable que no se ha inicializado, tiene un valor NULLy un tipo de cadena.
SELECT @var_any_var_name
Puede inicializar una variable usando SETo SELECTinstrucción:
SET @start = 1, @finish = 10;
o
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
A las variables de usuario se les puede asignar un valor de un conjunto limitado de tipos de datos: entero, decimal, coma 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 o utilizada por otros clientes.
Se pueden usar en SELECTconsultas utilizando técnicas de variables de usuario avanzadas de MySQL .
Variables locales (sin prefijo):
Las variables locales deben declararse utilizando DECLAREantes de acceder.
Se pueden usar 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 DEFAULTfalta la cláusula, el valor inicial es NULL.
El alcance de una variable local es el BEGIN ... ENDbloque dentro del cual se declara.
Variables del sistema del servidor (con el prefijo @@):
El servidor MySQL mantiene muchas variables del sistema configuradas en un valor predeterminado. Pueden ser de tipo GLOBAL, SESSIONo BOTH.
Las variables globales afectan el funcionamiento general del servidor, mientras que las variables de sesión afectan su funcionamiento para conexiones de clientes individuales.
Para ver los valores actuales utilizados por un servidor en ejecución, use la SHOW VARIABLESinstrucción o SELECT @@var_name.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
Se pueden configurar al inicio del servidor usando las opciones en la línea de comando o en un archivo de opciones. La mayoría de ellos se pueden cambiar dinámicamente mientras el servidor se está ejecutando usando SET GLOBALo 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;=operador no funcionó para mí. Funcionó bien cuando utilicé el :=operador.
=El operador solo funciona en la SETcláusula. Para asignar valor a una variable en la SELECTconsulta, puede usar el :=operador, por ejemploSELECT @start := 1
CONJUNTO
SET @var_name = value
O
SET @var := value
ambos operadores = y : = son aceptados
SELECCIONE
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
si se encontraron varios conjuntos de registros, solo el último valor en col2 es mantener (anular);
SELECT col1, col2 INTO @var_name, col3 FROM .....
en este caso el resultado de select no contiene valores col2
Ej. Ambos métodos utilizados
- TRIGGER_BEFORE_INSERT --- establecer un valor de columna a partir de los cálculos
...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col = IFNULL( @NR, 0 ) + 1;
...
=y :=?
SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10parece evaluar las asignaciones de variables antes de que se realice el pedido, por lo que el valor devuelto de @var podría no estar relacionado con ninguna de las filas devueltas. Sin embargo, los documentos no dicen en qué condiciones puede suceder esto.
Use establecer o seleccionar
SET @counter := 100;
SELECT @variable_name := value;
ejemplo:
SELECT @price := MAX(product.price)
FROM product
Diferentes tipos de variables:
DECLARE está permitido solo dentro de una declaración compuesta BEGIN ... END y debe estar al inicio, antes de cualquier otra declaración.
Por lo tanto, si está definiendo un programa almacenado y realmente desea una "variable local", deberá soltar el carácter @ y asegurarse de que su declaración DECLARE esté al comienzo de su bloque de programa. De lo contrario, para usar una "variable de usuario", descarte la declaración DECLARE.
Además, deberá encerrar su consulta entre paréntesis para ejecutarla como una subconsulta:
SET @countTotal = (SELECCIONAR CUENTA (*) DESDE nGrams);
O bien, podría usar SELECT ... INTO:
SELECCIONE EL CONTEO (*) EN @countTotal FROM nGrams;
Para cualquier persona que use @variable en la función concat_ws para obtener valores concatenados, no olvide reiniciarlo con un valor vacío. De lo contrario, puede usar el valor anterior para la misma sesión.
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;