(十)MySQL中的变量

通常认为,MySQL中的变量可分为:

  • 局部变量
  • 用户变量
  • 会话变量
  • 全局变量

下面将逐一对其进行介绍。


1、局部变量

局部变量只在当前BEGIN……END代码块中有效,其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。
  DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。

定义局部变量的语法结构:
DECLARE var_name [,……] type [DEFAULT value];

使用SET语句赋值局部变量:
set var_name = value;

使用SELECT语句赋值局部变量:
SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];

创建存储过程p1用来演示局部变量的相关操作:

其中变量c就是由DECLARE语句定义的局部变量,调用后结果如下:

SELECT语句赋值在(九)MySQL存储过程中的第5部分演示过,这里就此省略。


2、用户变量

用户变量的作用域比局部变量要广,用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将失效。

用户变量不需要事前声明,可以直接使用,用户变量以@var_name的形式命名变量,变量名必须以@开头。

使用SET语句赋值局部变量:
SET @var_name = value;

SET @var_name := value;

使用SELECT语句赋值局部变量:
SELECT @var_name := value;

关于“=”与“:=”的区别:
对于SET语句而言,两种方式都可以使用;
对于SELECT语句而言,只能使用“:=”,因为在SELECT语句中,“=”被看作是比较操作符。

创建存储过程p2用来演示用户变量的相关操作:

其中变量@sum和@prod就是使用SELECT语句赋值的用户变量,调用后结果如下:

剩余的变量@var1和@var2则是使用SET语句赋值的用户变量,查询后结果如下:


3、系统变量

MySQL可以访问许多系统和连接变量。当服务器运行时许多变量允许动态更改。这样就可以修改服务器操作而不需要停止并重启服务器。
  mysqld服务器维护两种变量:会话变量影响具体客户端连接的操作;全局变量影响服务器整体操作。


4、会话变量

服务器为每个连接的客户端维护一系列会话变量。会话变量在每次建立一个新的连接时,MySQL会将当前所有的全局变量复制一份做为会话变量,也就是说,如果在建立会话以后,没有人为更改过会话变量与全局变量的值,那这两份变量的值应该都是一一对应,完全一致的。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。会话变量的作用域与用户变量一样,仅限于当前连接。当前连接断开后,其设置的所有会话变量均失效。

赋值会话变量的方式:
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%'];

注意:
凡是上面提到的“SESSION”关键字,都可以用“LOCAL”关键字来代替,例如:
SELECT @@LOCAL.var_name;

查询“sort_buffer_size”来演示会话变量的相关操作:


5、全局变量

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

赋值全局变量的方式:
SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;

查询全局变量的方式:
SELECT @@GLOBAL.var_name;
SHOW GLOBAL VARIABLES [LIKE '%var%'];

查询“sort_buffer_size”来演示全局变量的相关操作:

无论是在设置系统变量还是查询系统变量值的时候,只要没有指定到底是全局变量还是会话变量。都当做会话变量来处理。

注意:

  1. 赋值变量时不指定关键字GLOBAL、SESSION或LOCAL,则默认使用SESSION关键字;
  2. 当使用SELECT @@var_name检索变量时(即不指定关键字GLOBAL、SESSION或LOCAL),MySQL返回SESSION值(如果存在),否则返回GLOBAL值;
  3. 对于SHOW VARIABLES,如果不指定关键字GLOBAL、SESSION或LOCAL,MySQL返回SESSION值。

6、MySQL中的变量SQL语句汇总:

  • 局部变量
    定义局部变量:
    DECLARE var_name [,……] type [DEFAULT value];
    使用SET语句赋值局部变量:
    set var_name = value;
    使用SELECT语句赋值局部变量:
    SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];

  • 用户变量
    使用SET语句赋值局部变量:
    SET @var_name = value;

    SET @var_name := value;
    使用SELECT语句赋值局部变量:
    SELECT @var_name := value;

  • 会话变量
    赋值会话变量的方式:
    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%'];
    注意:
    凡是上面提到的“SESSION”关键字,都可以用“LOCAL”关键字来代替,例如:
    SELECT @@LOCAL.var_name;

  • 全局变量
    赋值全局变量的方式:
    SET GLOBAL var_name = value;
    SET @@GLOBAL.var_name = value;
    查询全局变量的方式:
    SELECT @@GLOBAL.var_name;
    SHOW GLOBAL VARIABLES [LIKE '%var%'];


版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 4,717评论 0 7
  • 一. Java基础部分.................................................
    wy_sure阅读 3,731评论 0 11
  • “四十年前,江湖上出现了一位自称沈狂的怪客,他只用了七天就端了湘西十四鬼的窝,更因在三个月内连续打败了西域金臂大王...
    谢沛霖阅读 967评论 2 3
  • 我是一片六瓣小雪花 在茫茫的天空里飘洒 我睁着圆圆的眼睛虔诚地望着天空 想象着属于自己美好的人生 我以为会遇见彩虹...
    止文阅读 273评论 7 1