1 用户变量介绍
用户变量即用户自己定义的变量,我们可以给用户变量分配值,并且可用在任何可以正常使用标量表达式的地方。
引入用户变量之前我们必须使用set语句或select语句来定义它,然后为它赋一个值,否则变量就只有一个空值。
用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
2 用户变量定义
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 用户变量的使用
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 | +-------+
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 | +-------+---------+-------+-------+
4 用户变量注意事项
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。
5 补充知识:mysql语句do
在do语句中,使用了一个或多个标量表达式,mysql会一条一条的处理它们,但并不显示表达式的结果。例如我们可以调用函数执行后台的某些事情,而不需要看到其结果。
例如:
mysql> do sleep(5); Query OK, 0 rows affected (5.00 sec)
总结
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]