用户变量简介

用户变量即用户自己定义的变量,我们可以给用户变量分配值,并且可用在任何可以正常使用标量表达式的地方。
用户变量与连接有关,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

用户变量以”@”开始,形式为”@var_name“,以区分用户变量及列名。它可以是任何随机的,复合的标量表达式,只要其中没有列指定。一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。缺省字符集是ISO-8859-1 Latin1;这可以用mysqld 的—default-character-set 选项更改字符集。

定义用户变量

引入用户变量之前我们必须使用set语句或select语句来定义它,然后为它赋一个值,否则变量就只有一个空值。
set语句

  1. SET @var_name = expr [, @var_name = expr] ...

select语句

  1. SELECT @var_name := expr [, @var_name = expr] ...

对于SET,可以使用=或:=来赋值,对于SELECT只能使用:=来赋值。

实例:set语句

用来把一个值赋给一个变量的表达式可以是复合表达式。计算,函数,系统标量以及其他用户变量都是允许的,子查询也是允许的。然后通过select语句可以获取一个用户变量的值,结果是带有一行的一个表。

  1. set @var1=1, @var2='vartest', @var3=abs(-2), @var4=(select count(*) from mysql.user);
  2. select @var1, @var2, @var3, @var4;
  3. +-------+---------+-------+-------+
  4. | @var1 | @var2 | @var3 | @var4 |
  5. +-------+---------+-------+-------+
  6. | 1 | vartest | 2 | 25 |
  7. +-------+---------+-------+-------+

在用来为一个用户变量赋值的表达式中,也可以指定其它的用户变量,需要注意的是mysql首先确定所有表达式的值,之后才会把值赋给变量。

  1. set @varA = 2;
  2. #对于下面两个例子,varB的值是不同的。
  3. set @varA = 3, @varB = @varA;
  4. select @varB;
  5. +-------+
  6. | @varB |
  7. +-------+
  8. | 2 |
  9. +-------+
  10. set @varA = 3;
  11. set @varB = @varA;
  12. select @varB;
  13. +-------+
  14. | @varB |
  15. +-------+
  16. | 3 |
  17. +-------+

实例:select语句

相对set语句而言,使用select定义变量,会返回一个表格形式的结果。

  1. select @var1:=1, @var2:='vartest', @var3:=abs(-2), @var4:=(select count(*) from mysql.user);
  2. +----------+------------------+----------------+------------------------------------------+
  3. | @var1:=1 | @var2:='vartest' | @var3:=abs(-2) | @var4:=(select count(*) from mysql.user) |
  4. +----------+------------------+----------------+------------------------------------------+
  5. | 1 | vartest | 2 | 25 |
  6. +----------+------------------+----------------+------------------------------------------+
  7. select @var1, @var2, @var3, @var4;
  8. +-------+---------+-------+-------+
  9. | @var1 | @var2 | @var3 | @var4 |
  10. +-------+---------+-------+-------+
  11. | 1 | vartest | 2 | 25 |
  12. +-------+---------+-------+-------+
  13. +-------+---------+-------+-------+
  14. | 1 | vartest | 2 | 25 |
  15. +-------+---------+-------+-------+

注意事项

  1. 用户变量用在where或having子句中,他们必须首先用另一条语句来定义。如下面例子,初次查询没有返回结果,限定以后再查询才有输出。

http://blog.csdn.net/jesseyoung/article/details/40779631

  1. 用户变量为session级别,当我们关闭客户端或退出登录时用户变量全部消失。如果想用就保存自定义的变量,需要自行创建一个表,将标量insert到表里。

  2. 用户变量名对大小写不敏感。

  3. 未定义的变量初始化是null。

补充:do语句

在do语句中,使用了一个或多个标量表达式,mysql会一条一条的处理它们,但并不显示表达式的结果。例如我们可以调用函数执行后台的某些事情,而不需要看到其结果。