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.

