¿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 NULL
y un tipo de cadena.
SELECT @var_any_var_name
Puede inicializar una variable usando SET
o SELECT
instrucció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 SELECT
consultas utilizando técnicas de variables de usuario avanzadas de MySQL .
Variables locales (sin prefijo):
Las variables locales deben declararse utilizando DECLARE
antes 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 DEFAULT
falta la cláusula, el valor inicial es NULL
.
El alcance de una variable local es el BEGIN ... END
bloque 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
, SESSION
o 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 VARIABLES
instrucció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 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;
=
operador no funcionó para mí. Funcionó bien cuando utilicé el :=
operador.
=
El operador solo funciona en la SET
cláusula. Para asignar valor a una variable en la SELECT
consulta, 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 10
parece 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 ;