视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
对mysql中变量的详细介绍
2020-11-09 09:01:25 责编:小采
文档


定义变量

语法如下

declare var_name[,...] type [default value];

MYSQL 变量定义只能在存储过程或函数里面定义,不像 Oracle / SQL Server。该变量的作用范围只能在begin...end块中。变量定义必须写在复合语句的开头,并且在任何其他语句的前面。可以一次声明多个相同类型的变量。可以使用default赋默认值。declare只能用在局部变量定义中。

#举例
declare v_test int default 10;

设置变量

方式一

set var_name=expr,[,var_name2=expr ...];

#举例
set v_test=15;

方式二

select col_name[,...] into var_name[,...] table_expr;

#举例
select sid into @a from test1;

如果col_name(如sid)返回多行值,@a最后只会去最后一行值。

变量分类

局部变量(不需要加@)

局部变量一般用在sql语句块中,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。局部变量一般用declare来声明,可以使用default来说明默认值。

create procedure add(in a int,in b int)
begin
 declare c int default 0;#c定义的局部变量
 set c = a + b;
 select c as c;
end;

用户变量(一个@)

用户变量的作用域要比局部变量要广。用户变量可以作用于当前整个连接,但是当当前连接断开后,其所定义的用户变量都会消失。
用户变量使用如下的方式定义:@变量名

#举例
set @a = 1;
set @b = 2;
select @sum:=(@a + @b), @dif:=(@a - @b);

结果


用户变量

会话变量(两个@@)

服务器为每个连接的客户端维护一系列会话变量。在客户端连接时,使用相应全局变量的当前值对客户端的会话变量进行初始化。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。会话变量的作用域与用户变量一样,仅限于当前连接。当当前连接断开后,其设置的所有会话变量均失效。

#设置会话变量有如下三种方式:
set session var_name = value;
set @@session.var_name = value;
set var_name = value;

#查看一个会话变量也有如下三种方式:
select @@var_name;
select @@session.var_name;
show session variables like "%var%";

全局变量(两个@@)

全局变量影响服务器整体操作。当服务器启动时,它将所有全局变量初始化为默认值。这些默认值可以在选项文件中或在命令行中指定的选项进行更改。要想更改全局变量,必须具有SUPER权限。全局变量作用于server的整个生命周期,但是不能跨重启。即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。

#要设置一个全局变量,有如下两种方式:
set global var_name = value; 
set @@global.var_name = value; //同上

#要想查看一个全局变量,有如下两种方式:
select @@global.var_name;
show global variables like "%var%";

注意:此处的global不能省略。根据手册,set命令设置变量时若不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION。

【相关推荐】

1. 免费mysql在线视频教程

2. MySQL最新手册教程

3. 布尔教育燕十八mysql入门视频教程

下载本文
显示全文
专题