mysql set变量_mysql用户变量和set语句

SET @var_name = expr [, @var_name = expr] ...    也可使用select语句来定义:

SELECT @var_name := expr [, @var_name = expr] ...    用户变量:以"@"开始,形式为"@var_name",以区分用户变量及列名。它可以是任何随机的,复合的标量表达式,只要其中没有列指定。

一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。缺省字符集是ISO-8859-1 Latin1;这可以用mysqld 的--default-character-set 选项更改字符集。

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

我们可以使用一条简单的select语句查询定义的用户变量的值。

3.1 通过set的实例

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

mysql> set @var1=1, @var2='vartest', @var3=abs(-2), @var4=(select count(*) from mysql.user);

mysql> select @var1, @var2, @var3, @var4;

+-------+---------+-------+-------+

| @var1 | @var2 | @var3 | @var4 |

+-------+---------+-------+-------+

| 1 | vartest | 2 | 25 |

+-------+---------+-------+-------+    在用来为一个用户变量赋值的表达式中,也可以指定其它的用户变量,

需要注意的是mysql首先确定所有表达式的值,之后才会把值赋给变量。

例如:

mysql> set @varA = 2;    对于下面两个例子,varB的值是不同的。

例1:

mysql> set @varA = 3, @varB = @varA;

mysql> select @varB;

+-------+

| @varB |

+-------+

| 2 |

+-------+    例2:

mysql> set @varA = 3;

mysql> set @varB = @varA;

mysql> select @varB;

+-------+

| @varB |

+-------+

| 3 |

+-------+

0818b9ca8b590ca3270a3433284dd417.png    

3.2 通过select的实例

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

mysql> select @var1:=1, @var2:='vartest', @var3:=abs(-2), @var4:=(select count(*) from mysql.user);

+----------+------------------+----------------+------------------------------------------+

| @var1:=1 | @var2:='vartest' | @var3:=abs(-2) | @var4:=(select count(*) from mysql.user) |

+----------+------------------+----------------+------------------------------------------+

| 1 | vartest | 2 | 25 |

+----------+------------------+----------------+------------------------------------------+

mysql> select @var1, @var2, @var3, @var4;

+-------+---------+-------+-------+

| @var1 | @var2 | @var3 | @var4 |

+-------+---------+-------+-------+

| 1 | vartest | 2 | 25 |

+-------+---------+-------+-------+

+-------+---------+-------+-------+

| 1 | vartest | 2 | 25 |

+-------+---------+-------+-------+

0818b9ca8b590ca3270a3433284dd417.png

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

mysql> select @H:='localhost' from mysql.user where host = @H;

Empty set (0.00 sec)

mysql> select @H:='localhost';

+-----------------+

| @H:='localhost' |

+-----------------+

| localhost |

+-----------------+

1 row in set (0.00 sec)

mysql> select @H:='localhost', user from mysql.user where host = @H;

+-----------------+-----------------+

| @H:='localhost' | user |

+-----------------+-----------------+

| localhost | |

| localhost | jesse |

| localhost | local |

| localhost | root |

| localhost | user_tab_update |

+-----------------+-----------------+

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

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

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

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

例如:

mysql> do sleep(5);

Query OK, 0 rows affected (5.00 sec)

****************************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值