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@startAND@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.
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;
De alguna manera, el =operador no funcionó para mí. Funcionó bien cuando utilicé el :=operador.
divinedragon
24
=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
Omesh,
2
¿Puede aclarar qué significa esto: "No es necesario declarar las variables de sesión definidas por el usuario denotadas con el prefijo @"?
billynoah
3
@billynoah Supongo que significa que las variables de sesión definidas por el usuario (que comienzan con @) no necesitan una declaración explícita; simplemente puede asignarles inmediatamente como si ya hubieran sido declarados.
jobo3208
2
Y puede asignar una variable con el resultado de una declaración de selección como esta: SET @subscriptionId = (seleccione ID de suscripción del usuario donde emailAddress='[email protected] ');
Profetas de software
28
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;...
Supongo que para la sintaxis de mysql SELECT es necesario separar el significado de = (comparación) de: = (asign)
bortunac
1
En ciertos casos, los valores que quedan en las variables pueden NO corresponder a la última fila devuelta. Por ejemplo, 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.
Las variables locales (que no tienen el prefijo @) están fuertemente tipadas y definidas en el bloque de programa almacenado en el que se declaran. Tenga en cuenta que, tal como se documenta en DECLARE Syntax :
DECLARE está permitido solo dentro de una declaración compuesta BEGIN ... END y debe estar al inicio, antes de cualquier otra declaración.
Las variables de usuario (que tienen el prefijo @) se escriben libremente y se definen en la sesión. Tenga en cuenta que no necesitan ni pueden declararse, simplemente utilícelos directamente.
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.
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.Puede inicializar una variable usando
SET
oSELECT
instrucción:o
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:
Si
DEFAULT
falta la cláusula, el valor inicial esNULL
.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
oBOTH
.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 oSELECT @@var_name
.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
oSET SESSION
:fuente
=
operador no funcionó para mí. Funcionó bien cuando utilicé el:=
operador.=
El operador solo funciona en laSET
cláusula. Para asignar valor a una variable en laSELECT
consulta, puede usar el:=
operador, por ejemploSELECT @start := 1
O
ambos operadores = y : = son aceptados
si se encontraron varios conjuntos de registros, solo el último valor en col2 es mantener (anular);
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
fuente
=
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
ejemplo:
fuente
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:
O bien, podría usar SELECT ... INTO:
fuente
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.
fuente
Declarar:
SET @a = 1;
Uso:
INSERT INTO `t` (`c`) VALUES (@a);
fuente
Valor ajustado
fuente