mysql 变量赋值的三种方法
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量
第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……
注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
第三种用法:select 字段名1,字段名2 into @变量1,@变量2 from 表名 where …
在函数或存储过程或触发器中,在不能使用set的时候推荐第三种,因为第二种会在执行时返回查询结果,这在函数或触发器中会报 “Not allowed to return a result set from a function”错误。而第三种则不会报错。
————————————————
原文链接: https://www.cnblogs.com/franson-2016/p/11640452.html
1、<=>
安全比较运算符,用来做 NULL 值的关系运算。
因为 mysql 的 NULL 值的特性,任何值和其比较的结果都是 NULL, 1 = NULL,1 <> NULL / 1 != NULL 得到的结果都是 NULL。
SELECT 1 = NULL, 1 <> NULL, 1 != NULL;
±---------±----------±----------+
| 1 = NULL | 1 <> NULL | 1 != NULL |
±---------±----------±----------+
| NULL | NULL | NULL |
±---------±----------±----------+
1 row in set (0.00 sec)
当然我们可以用 IS NULL 去判断,即
SELECT 1 IS NULL, 1 IS NOT NULL, NOT (1 IS NULL), !(1 IS NULL);
±----------±--------------±----------------±-------------+
| 1 IS NULL | 1 IS NOT NULL | NOT (1 IS NULL) | !(1 IS NULL) |
±----------±--------------±----------------±-------------+
| 0 | 1 | 1 | 1 |
±----------±--------------±----------------±-------------+
1 row in set (0.00 sec)
但用 <=> 更为简洁
SELECT 1 <=> NULL, !(1 <=> NULL);
±-----------±--------------+
| 1 <=> NULL | !(1 <=> NULL) |
±-----------±--------------+
| 0 | 1 |
±-----------±--------------+
1 row in set (0.00 sec)
2、:=
:= 和 = 运算符在大部分场景下并无区别,但 := 更为全场景些。
= 只有在 set 和update时才是和 := 一样,赋值的作用,其它都是关系运算符 等于的作用。
:= 不只在 set 和 update 时赋值的作用,在 select 也是赋值的作用。
SET @name = ‘big_cat’;
SELECT @name;
#= 在 select 语句中成为了比较运算符 结果为 NULL (@name 为 NULL, 在 mysql 中 NULL 和任何值比较都为 NULL)
#:= 则为仍未赋值,@name_defined 被赋值为 big_cat 后再 select 就出来了
SELECT @name = ‘big_cat’, @name_defined := ‘big_cat’, @name_defined;
±------------------±---------------------------±--------------+
| @name = ‘big_cat’ | @name_defined := ‘big_cat’ | @name_defined |
±------------------±---------------------------±--------------+
| NULL | big_cat | big_cat |
±------------------±---------------------------±--------------+
1 row in set (0.00 sec)
3、@ 用户变量
@用来标识用户变量
SET @name = “big_cat”;
SELECT ‘big_cat’ INTO @name;
SELECT @name := ‘big_cat’;
4、@@系统变量
系统变量又分为全局系统变量和会话系统变量
读取系统变量
SELECT @@global.sort_buffer_size;
SELECT @@session.sort_buffer_size;
SHOW GLOBAL VARIABLES LIKE ‘sort_buffer_size’;
SHOW SESSION VARIABLES LIKE ‘sort_buffer_size’;
设置系统变量
SET @@global.sort_buffer_size = 2 * 1024 * 1024;
SET @@session.sort_buffer_size = 2 * 1024 * 1024;
SET GLOBAL sort_buffer_size = 2 * 1024 * 1024;
SET SESSION sort_buffer_size = 2 * 1024 * 1024;
有些系统变量只有全局级的,比如 max_connnections,读取时可以不显示声明 global,但设置时需要,否则会提示你设置的为全局变量。
————————————————
版权声明:本文为CSDN博主「李萌康」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_29876341/article/details/113268791