O MySQL suporta variáveis específicas da conexão com a
sintaxe @nomevariável
. Um nome de variável
pode consiste de caracteres alfanuméricos do conjunto de
caracteres atual e também ‘_
’,
‘$
’ e
‘.
’. O conjunto de caracteres
padrão é ISO-8859-1 Latin1; ele pode ser alterado com a
opção --default-character-set
do
mysqld
. See Secção 4.7.1, “O Conjunto de Caracteres Utilizado para Dados e Ordenação”.
Os nomes das variáveis de usuários são caso insensitivo nas
versão >= 5.0 e caso sensitivo nas versões < 5.0.
As variáveis não precisam ser inicializadas. Elas contém
NULL
por padrão e podem armazenar um valor
inteiro, real ou uma string. Todas as variáveis de uma thread
são automaticamente liberadas quando uma thread termina.
Você pode configurar uma variavel com a syntaxe
SET
.
SET @variável= { expressao inteira | expressao real | expressao string } [,@variável= ...].
Você também pode atribuir um valor a uma variável em outras
instruções diferentes de SET
. No entanto,
neste caso o operador de atribuição é :=
em vez de =
, porque =
é
reservado para comparações em instruções diferentes de
SET
:
mysql>SET @t1=0, @t2=0, @t3=0;
mysql>SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+ | @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 | +----------------------+------+------+------+ | 5 | 5 | 1 | 4 | +----------------------+------+------+------+
Variáveis de usuários devem ser utilizadas em expressões onde
são permitidas. Isto não inclui utiliza-las em contextos onde
um número é explicitamente necessário, assim como na
cláusula LIMIT
de uma instrução
SELECT
ou a clausula IGNORE number
LINES
de uma instrução LOAD DATA
.
NOTE: Em uma instrução
SELECT
, cada expressão só é avaliada
quando enviada ao cliente. Isto significa que nas cláusula
HAVING
, GROUP BY
, ou
ORDER BY
, você não pode fazer referência a
uma expreesão que envolve variáveis que são configuradas na
instrução SELECT
. Por examplo, a seguinte
instrução NÃO funcionará como o esperado:
SELECT (@aa:=id) AS a, (@aa+3) AS b FROM nome_tabela HAVING b=5;
A razão é que o @aa
não irá conter o
valor da linha atual, mas o valor da id
da
linha previamente aceita.
A regra geral é nunca atribuir e usar a mesma variável na mesma instrução.
Outra questão com configurar uma variável e usá-la na mesma
instrução é que o tipo do resultado padrão de uma variável
é baseada no tipo da variável no início da instrução.
(Assume-se que uma variável não atribuída possui o valor
NULL
e é do tipo STRING). O seguitne exemplo
ilustra isto:
mysql>SET @a="test";
mysql>SELECT @a,(@a:=20) FROM table_name;
Neste caso o MySQL relatará ao cliente que a coluna 1 é uma
string e converte todos os acessos de @a
a
strings, mesmo que @a seja configurada com um número para a
segunda linha. Depois que a instrução é executada
@a
será considerado como um número.
Se você tiver qualquer problema com isto, evite tanto configurar e usar a mesma variável na mesma instrução ou configurar a variável com 0, 0.0 ou "" antes de usá-la.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.