GNU Info

Info Node: (mysql.info)Variables

(mysql.info)Variables


Next: Comments Prev: Name case sensitivity Up: Language Structure
Enter node , (file) or (file)node

User Variables
--------------

MySQL supports thread-specific variables with the `@variablename'
syntax.  A variable name may consist of alphanumeric characters from
the current character set and also `_', `$', and `.' . The default
character set is ISO-8859-1 Latin1; this may be changed with the
`--default-character-set' option to `mysqld'. Note: Character sets.

Variables don't have to be initialized.  They contain `NULL' by default
and can store an integer, real, or string value.  All variables for a
thread are automatically freed when the thread exits.

You can set a variable with the `SET' syntax:

     SET @variable= { integer expression | real expression | string expression }
     [,@variable= ...].

You can also set a variable in an expression with the `@variable:=expr'
syntax:

     select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
     +----------------------+------+------+------+
     | @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
     +----------------------+------+------+------+
     |                    5 |    5 |    1 |    4 |
     +----------------------+------+------+------+

(We had to use the `:=' syntax here, because `=' was reserved for
comparisons.)

User variables may be used where expressions are allowed.  Note that
this does not currently include use in contexts where a number is
explicitly required, such as in the `LIMIT' clause of a `SELECT'
statement, or the `IGNORE number LINES' clause of a `LOAD DATA'
statement.

*NOTE:*  In a `SELECT' statement, each expression is only evaluated
when it's sent to the client.  This means that in the `HAVING', `GROUP
BY', or `ORDER BY' clause, you can't refer to an expression that
involves variables that are set in the `SELECT' part. For example, the
following statement will NOT work as expected:

     SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;

The reason is that `@aa' will not contain the value of the current row,
but the value of `id' for the previous accepted row.

Comments
Comment Syntax
Reserved words
Is MySQL Picky About Reserved Words?

automatically generated by info2www version 1.2.2.9