【997755.com澳门葡京】mysql中的变量,存款和储蓄进程之二

在mysql文书档案中,mysql变量可分为两大类,即系统变量和用户变量。

概念变量

语法如下

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

MYSQL 变量定义只可以在存款和储蓄进度或函数里面定义,不像 Oracle / SQL
Server。该变量的效应范围只辛亏begin…end块中。变量定义必须写在复合语句的始发,并且在任何其余语句的日前。能够一遍表明三个壹样类其他变量。能够采纳default赋暗中认可值。declare只能用在局部变量定义中。

#举例
declare v_test int default 10;

证实:现在市面上定义变量的学科和书本基本都置身存款和储蓄进度上表明,不过存款和储蓄进程上变量只能成效于begin…end块中,而1般的变量定义和选取都说的可比少,针对此类题材只幸亏官方文书档案中才能找到讲解。

  mysql中变量分为局地变量、用户变量、会话变量和全局变量。每一种变量的赋值格局,使用方法以及功能范围都不太一致。以下详细介绍这八类别型变量。

但据他们说实际利用又被细化为5连串型,即局地变量、用户变量、会话变量和全局变量。

设置变量

方式一

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最终只会去最终壹行值。

前言

1、局部变量

 

变量分类

MySQL存款和储蓄进程中,定义变量有二种方法: 

  局部变量壹般定义在sql语句块中,如存款和储蓄进度的的begin/end。作用范围也只在这些语句块中。执行达成后,就会销毁。局地变量能够接纳declare注解,default设置暗中同意值。语法如下:

一、局部变量

有个别变量(不须要加@)

一对变量1般用在sql语句块中,比如存款和储蓄进程的begin/end。其效率域仅限于该语句块,在该语句块执行完成后,局地变量就熄灭了。局地变量1般用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;

【997755.com澳门葡京】mysql中的变量,存款和储蓄进程之二。壹、使用set或select直接赋值,变量名以@初步

  DECLARE 变量名称  变量类型 DEFAULT 私下认可值;

mysql局地变量,只可以用在begin/end语句块中,比如存储进程中的begin/end语句块。

用户变量(一个@)

用户变量的功能域要比部分变量要广。用户变量能够功能于当下全方位连接,可是当当前延续断开后,其所定义的用户变量都会化为乌有。
用户变量使用如下的措施定义:@变量名

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

结果

997755.com澳门葡京 1

用户变量

例如:

DROP PROCEDURE IF EXISTS proc_test_var_loc;
CREATE PROCEDURE proc_test_var_loc( )
BEGIN 
    DECLARE t1 INT DEFAULT 1; -- local的变量
  SET t1 = t1 +1; 
    SELECT t1 ;
END;

CALL proc_test_var_loc();

其功能域仅限于该语句块。

对话变量(五个@@)

服务器为各类连接的客户端维护一类别会话变量。在客户端连接时,使用相应全局变量的此时此刻值对客户端的对话变量举办开首化。设置会话变量不供给尤其权限,但客户端只可以变更本人的对话变量,而不能够改变其它客户端的对话变量。会话变量的作用域与用户变量一样,仅限于当前连接。当当前接连断开后,其设置的具备会话变量均失效。

#设置会话变量有如下三种方式:
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%";
set @var=1; 

  每回调用该存款和储蓄进度的结果都以如出1辙,因为每趟执行完该存款和储蓄进度,变量都会销毁。当第2次实施的时候就会再一次初阶化。

-- declare语句专门用于定义局部变量,可以使用default来说明默认值
declare age int default 0;

-- 局部变量的赋值方式一
set age=18;

-- 局部变量的赋值方式二
select StuAge 
into age
from demo.student 
where StuNo='A001';

全局变量(八个@@)

全局变量影响服务器全部操作。当服务器运营时,它将持有全局变量初阶化为默许值。那些暗中认可值能够在采纳文件中或在指令行中钦命的选项进行转移。要想改变全局变量,必须怀有SUPE帕杰罗权限。全局变量成效于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。

能够在一个对话的任哪儿方申明,成效域是全部会话,称为用户变量。

②、用户变量

 

参考

http://blog.csdn.net/lxgwm2008/article/details/7738306
http://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html

2、以declare关键字申明的变量,只可以在仓储进程中央银行使,称为存款和储蓄进程变量,例如: 

  用户变量的功效重返在当前一切连接,当前连接断开后,变量就会销毁。用户变量不需求证明,间接使用set
@变量名即可。语法如下:

二、用户变量

declare var1 int default 0; 

  set @变量名 = 变量值 

mysql用户变量,mysql中用户变量不用提前评释,在用的时候一向用“@变量名”使用就足以了。

根本用在仓库储存进程中,恐怕是给存款和储蓄传参数中。

  set @变量名 :=变量值

其成效域为目前一连。

四头的分别是: 

DROP PROCEDURE IF EXISTS proc_test_var_user;
CREATE PROCEDURE proc_test_var_user()
BEGIN   
        SET @var1 = @var1 + 1; -- 变量加一
        SET @var2 := @var2 -1; -- 变量减一
    SELECT @num1:=(@var1) AS sum, @num2:=(@var2) AS dif; -- 查询两个变量的和、差
END;
-- 一下两个语句只需要调用一次
SET @var1 = 1; -- 设置初始值
SET @var2 := 2; -- 设置初始值
CALL proc_test_var_user();
-- 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值
set @age=19;

set @age:=20;

-- 第二种用法,使用select时必须用“:=”赋值符号赋值
select @age:=22;

select @age:=StuAge 
from demo.student 
where StuNo='A001';

在调用存款和储蓄进度时,以declare证明的变量都会被起初化为null。而会话变量(即@开首的变量)则不会被再开首化,在2个会话内,只须起首化三回,之后在对话内都以对上3次计算的结果,就也便是在是以此会话内的全局变量。

  由于用户变量的机能范围在全数连接,所以在二遍三番五次中,执行完SET @var1= 一;SET @var二 := 二;贰回之后,每便调用CALL
proc_test_var_user();的结果都不等同。

 

主导内容

 3、会话变量

三、会话变量

  • 有个别变量 
  • 用户变量 
  • 对话变量 
  • 全局变量 

  会话变量又称为session变量,会话变量的功能范围与用户变量1样,在当前连接。当连接断开后,全部的对话变量都被灭绝。

mysql会话变量,服务器为每种连接的客户端维护1多重会话变量。

对话变量和全局变量叫系统变量。

  查看会话变量如下:

其成效域仅限于当前连年,即每种连接中的会话变量是单身的。

一、局地变量,只在眼下begin/end代码块中有效

select @@autocommit; -- 查看一个会话变量
select @@session.autocommit; -- 查看一个会话变量
show session variables like "%bin%"; -- 查看多个会话变量
show session variables; -- 查看所有会话变量
-- 显示所有的会话变量
show session variables;

-- 设置会话变量的值的三种方式
set session auto_increment_increment=1;
set @@session.auto_increment_increment=2;
set auto_increment_increment=3;        -- 当省略session关键字时,默认缺省为session,即设置会话变量的值

-- 查询会话变量的值的三种方式
select @@auto_increment_increment;
select @@session.auto_increment_increment;
show session variables like '%auto_increment_increment%';        -- session关键字可省略

-- 关键字session也可用关键字local替代
set @@local.auto_increment_increment=1;
select @@local.auto_increment_increment;

997755.com澳门葡京 ,有个别变量一般用在sql语句块中,比如存款和储蓄进度的begin/end。其成效域仅限于该语句块,在该语句块执行完成后,局地变量就未有了。declare语句专门用来定义局地变量,能够应用default来表明暗许值。set语句是安装不相同品种的变量,包括会话变量和全局变量。 
有的变量定义语法形式

  设置会话变量如下:

 

declare var_name [, var_name]... data_type [ DEFAULT value ];
set session autocommit = 1;
set @@session.autocommit = 0;
set autocommit = 1; -- 不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION

四、全局变量

比如在begin/end语句块中添加如下1段语句,接受函数传进来的a/b变量然后相加,通过set语句赋值给c变量。 

四、系统变量

mysql全局变量,全局变量影响服务器全体操作,当服务运转时,它将拥有全局变量开头化为暗中认可值。要想改变全局变量,必须怀有super权限。

set语句语法情势set var_name=expr [, var_name=expr]...; set语句既能够用来局部变量的赋值,也能够用于用户变量的表达并赋值。

  全局变量不是由用户的程序定义的,而是在劳务器级定应义的。当服务器运行时,将富有全局变量开始化。那一个默许值能够在安插文件或在指令行中举行改动的。要想更改全局变量,必须具备最棒权限。全局变量效用于服务器的一体生命周期,服务重视新开动后,设置的变量就会失效。要想让全局变量重启后继续生效,需求转移相应的安顿文件。引用全局变量时,必须以“@@”初叶。局地变量的名称不能够与全局变量的名目1致、不然会在应用中失误。

其成效域为server的全方位生命周期。

declare c int default 0;
set c=a+b;
select c as C;

  查看系统变量如下:

-- 显示所有的全局变量
show global variables;

-- 设置全局变量的值的两种方式
set global sql_warnings=ON;        -- global不能省略
set @@global.sql_warnings=OFF;

-- 查询全局变量的值的两种方式
select @@global.sql_warnings;
show global variables like '%sql_warnings%';

抑或用select …. into…方式赋值

select @@global.autocommit; -- 查看某个系统变量
show global variables like "%bin%"; --查看多个系统变量
show global variables;  --查看所有系统变量

 

select into 语句句式:select col_name[,...] into var_name[,...] table_expr [where...];

  设置系统变量如下:

例子:

set global autocommit = 1; -- 注意:此处的global不能省略。根据手册,set命令设置变量时若不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION
set @@global.autocommit = 0;
declare v_employee_name varchar(100);
declare v_employee_salary decimal(8,4);

select employee_name, employee_salary
into v_employee_name, v_employee_salary
from employees
where employee_id=1;

  我们应用变量时,尽量选用限制小的,这样能尽量收缩多次操作直接的影响。

2、用户变量,在客户端链接到数据库实例整个进度中用户变量都是卓有成效的。

MySQL中用户变量不用事先表明,在用的时候平素用“@变量名”使用就足以了。 

率先种用法:set @num=1; 或set @num:=1; //那里要运用set语句创制并伊始化变量,直接运用@num变量 

其次种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……, 

select语句1般用来输出用户变量,比如select
@变量名,用于出口数据源不是表格的数据。

留神上边二种赋值符号,使用set时得以用“=”或“:=”,可是利用select时必须用“:=赋值”

用户变量与数据库连接关于,在再而叁中声称的变量,在蕴藏进程中开创了用户变量后直接到数据库实例接断开的时候,变量就会化为乌有。

在此再三再四中声称的变量不只怕在另1一而再中应用。

用户变量的变量名的款式为@varname的款式。

名字务必以@初步。

宣示变量的时候要求采取set语句,比如上边的说话注明了一个名叫@a的变量。

set @a = 1;

宣示1个名称为@a的变量,并将它赋值为1,MySQL里面包车型地铁变量是不严加界定数据类型的,它的数据类型依照你赋给它的值而每1天变动 。(SQL
SE福特ExplorerVE帕杰罗中利用declare语句注脚变量,且严俊限定数据类型。) 

大家还足以行使select语句为变量赋值 。 

比如:

set @name = '';
select @name:=password from user limit 0,1;
#从数据表中获取一条记录password字段的值给@name变量。在执行后输出到查询结果集上面。

(注意等于号前边有三个冒号,前边的limit
0,壹是用来限制再次来到结果的,表示能够是0或1个。约等于SQL SE昂CoraVE猎豹CS陆里面的top
一) 

万向来白写:select @name:=password from user;

若果这几个查询重临多少个值的话,那@name变量的值正是最后一条记下的password字段的值
。 

用户变量能够作用于当下任何连接,但当当前连年断开后,其所定义的用户变量都会未有。 

用户变量使用如下(大家决不使用declare关键字对用户变量实行定义,可以一向那样使用)定义,变量名必须以@发轫:

#定义
select @变量名  或者 select @变量名:= 字段名 from 表名 where 过滤语句;
set @变量名;
#赋值 @num为变量名,value为值
set @num=value;或select @num:=value;

对用户变量赋值有两种方式,1种是一向用”=”号,另1种是用”:=”号。其分别在于利用set命令对用户变量进行赋值时,三种艺术都能够动用;当使用select语句对用户变量举行赋值时,只好利用”:=”方式,因为在select语句中,”=”号declare语句专门用来定义局部变量。set语句是安装分歧品类的变量,包括会话变量和全局变量。

例如:

begin
#Routine body goes here...
#select c as c;
declare c int default 0;
set @var1=143;  #定义一个用户变量,并初始化为143
set @var2=34;
set c=a+b;
set @d=c;
select @sum:=(@var1+@var2) as sum, @dif:=(@var1-@var2) as dif, @d as C;#使用用户变量。@var1表示变量名

set c=100;
select c as CA;
end

#在查询中执行下面语句段
call `order`(12,13);  #执行上面定义的存储过程
select @var1;  #看定义的用户变量在存储过程执行完后,是否还可以输出,结果是可以输出用户变量@var1,@var2两个变量的。
select @var2;

在执行完order存款和储蓄进程后,在蕴藏进度中新建的var1,var二用户变量还能够用select语句输出的,可是存款和储蓄进程之中定义的有的变量c无法分辨。

系统变量:

系统变量又分为全局变量与会话变量。

全局变量在MySQL运转的时候由服务器自动将它们初阶化为暗许值,这一个暗中同意值能够透过改动my.ini这一个文件来改变。

对话变量在每趟建立2个新的连接的时候,由MySQL来早先化。MySQL会将眼下持有全局变量的值复制一份。来做为会话变量。

(也正是说,假使在确立会话未来,未有手动更改过会话变量与全局变量的值,那全数那一个变量的值都是同样的。)

全局变量与会话变量的不相同就在于,对全局变量的修改会影响到任何服务器,然则对会话变量的改动,只会潜移默化到当下的对话(也便是日前的数据库连接)。

作者们能够选择

show session variables;

说话将全体的对话变量输出(能够简写为show
variables,未有点名是出口全局变量照旧会话变量的话,默许就输出会话变量。)假如想出口全数全局变量:

show global variables

稍加系统变量的值是可以使用言语来动态进展变更的,可是有个别系统变量的值却是只读的。

对此那贰个能够转移的系统变量,大家得以行使set语句实行改动。

系统变量在变量名前面有五个@; 

比方想要更改对话变量的值,利用言语:

set session varname = value;
或者
set @@session.varname = value;

比如:

mysql> set session sort_buffer_size = 40000;
Query OK, 0 rows affected(0.00 sec)
用select @@sort_buffer_size;输出看更改后的值是什么。
如果想要更改全局变量的值,将session改成global:
set global sort_buffer_size = 40000;
set @@global.sort_buffer_size = 40000;

而是要想改变全局变量的值,须要有所super权限 。

(注意,root只是1个放到的账号,而不是一种权限
,这几个账号拥有了MySQL数据库里的享有权力。任何账号只要它装有了名称叫super的这一个权力,就可以变更全局变量的值,正如其余用户1旦抱有file权限就足以调用load_file或者into
outfile,into dumpfile,load data infile一样。)

利用select语句大家能够查询单个会话变量恐怕全局变量的值:

select @@session.sort_buffer_size
select @@global.sort_buffer_size
select @@global.tmpdir

举凡下边提到的session,都能够用local这么些重点字来代替。

比如:  

select @@local.sort_buffer_size
local是session的近义词。

不论在安装系统变量依旧查询系统变量值的时候,只要未有点名到底是全局变量依旧会话变量。都作为会话变量来处理。 

比如: 

set @@sort_buffer_size = 50000; 
select @@sort_buffer_size; 

地点都并未有点名是blobal仍旧session,所以一切当做session处理。

三、会话变量

服务器为各种连接的客户端维护1多如牛毛会话变量。在客户端连接数据库实例时,使用相应全局变量的当下值对客户端的对话变量举办早先化。设置会话变量不必要新鲜权限,但客户端只好改成自身的对话变量,而无法改变其余客户端的对话变量。对话变量的作用域与用户变量1样,仅限于当前一连。当当前接连断开后,其设置的富有会话变量均失效。

安装会话变量有如下两种办法改变会话变量的值:

set session var_name = value;
set @@session.var_name = value;
set var_name = value;  #缺省session关键字默认认为是session

查看所有的会话变量
show session variables;

查看一个会话变量也有如下三种方式:

select @@var_name;
select @@session.var_name;
show session variables like "%var%";

举凡上边提到的session,都可以用local那些至关心注重要字来取代。 

比如: 

select @@local.sort_buffer_size 
local是session的近义词。

肆、全局变量

全局变量影响服务器全部操作。当服务器运转时,它将享有全局变量初阶化为私下认可值。这几个暗许值能够在选用文件中或在指令行中内定的选项进行转移。要想改变全局变量,必须怀有super权限。全局变量成效于server的方方面不熟悉命周期,不过不能够跨重启。即重启后拥有安装的全局变量均失效。要想让全局变量重启后继续生效,供给变更相应的布署文件。

要设置贰个全局变量,有如下二种艺术:

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

翻看全体的全局变量 

show global variables; 

要想查看三个全局变量,有如下二种艺术:

select @@global.var_name;
show global variables like “%var%”;

 

参考:

(以上内容转自此篇小说)

 

 

http://blog.163.com/longsu2010@yeah/blog/static/173612348201162595425697/ 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website