这是Mysql系列第16篇。

环境:mysql5.7.25,cmd命令中进行演示。

代码中被[]包含的表示可选,|符号分开的表示可选其一。

我们在使用mysql的过程中,变量也会经常用到,比如查询系统的配置,可以通过查看系统变量来了解,当我们需要修改系统的一些配置的时候,也可以通过修改系统变量的值来进行。

我们需要做一些批处理脚本的时候,可以使用自定义变量,来做到数据的复用。所以变量这块也挺重要,希望大家能够掌握。

本文内容

  • 详解系统变量的使用
  • 详解自定义变量的使用

变量分类

  • 系统变量
  • 自定义变量

系统变量

概念

系统变量由系统定义的,不是用户定义的,属于mysql服务器层面的。

系统变量分类

  • 全局变量
  • 会话变量

使用步骤

查看系统变量
//1.查看系统所有变量

上面使用了show关键字

查看满足条件的系统变量

通过like模糊匹配指定的变量

//查看满足条件的系统变量(like模糊匹配)

上面使用了show和like关键字。

查看指定的系统变量
//查看指定的系统变量的值

注意select@@关键字,global和session后面有个.符号。

赋值
//方式1

注意:

上面使用中介绍的,全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认为session级别。

全局变量的使用中用到了@@关键字,后面会介绍自定义变量,自定义变量中使用了一个@符号,这点需要和全局变量区分一下。

全局变量

作用域

mysql服务器每次启动都会为所有的系统变量设置初始值。

我们为系统变量赋值,针对所有会话(连接)有效,可以跨连接,但不能跨重启,重启之后,mysql服务器会再次为所有系统变量赋初始值。

示例

查看所有全局变量
/*查看所有全局变量*/
查看包含'tx'字符的变量
/*查看包含`tx`字符的变量*/
为某个变量赋值
/*为某个系统变量赋值*/
0;

会话变量

作用域

针对当前会话(连接)有效,不能跨连接。

会话变量是在连接创建时由mysql自动给当前会话设置的变量。

示例

查看所有会话变量
/*①查看所有会话变量*/
查看满足条件的会话变量
/*②查看满足条件的步伐会话变量*/
查看指定的会话变量的值
/*③查看指定的会话变量的值*/
为某个会话变量赋值
/*④为某个会话变量赋值*/

效果:

@tx_isolation;

自定义变量

概念

变量由用户自定义的,而不是系统提供的。

使用

使用步骤:
1. 声明
2. 赋值
3. 使用(查看、比较、运算)

分类

  • 用户变量
  • 局部变量

用户变量

作用域

针对当前会话(连接)有效,作用域同会话变量。

用户变量可以在任何地方使用也就是既可以在begin end里面使用,也可以在他外面使用。

使用

声明并初始化(要求声明时必须初始化)
/*方式1*/

注意:

上面使用了@符合,而上面介绍全局变量使用了2个@符号,这点注意区分一下。

set中=号前面冒号是可选的,select方式=前面必须有冒号

赋值(更新变量的值)
/*方式1:这块和变量的声明一样*/

注意上面select的两种方式。

使用
select @变量名;

综合示例

/*set方式创建变量并初始化*/

局部变量

作用域

declare用于定义局部变量变量,在存储过程和函数中通过declare定义变量在begin…end中,且在语句之前。并且可以通过重复定义多个变量

declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。

使用

声明
declare 变量名 变量类型;
declare 变量名 变量类型 [default 默认值];
赋值
/*方式1*/

注意:局部变量前面没有@符号

使用(查看变量的值)
select 局部变量名;

示例

/*创建表test1*/

代码中使用到了存储过程,关于存储过程的详解下章节介绍。

delimiter关键字

我们写sql的时候,mysql怎么判断sql是否已经结束了,可以去执行了?

需要一个结束符,当mysql看到这个结束符的时候,表示可以执行前面的语句了,mysql默认以分号为结束符。

当我们创建存储过程或者自定义函数的时候,写了很大一片sql,里面包含了很多分号,整个创建语句是一个整体,需要一起执行,此时我们就不可用用分号作为结束符了。

那么我们可以通过delimiter关键字来自定义结束符。

用法:

delimiter 分隔符
上面示例的效果
/*创建表test1*/

用户变量和局部变量对比

作用域

定义位置

语法

用户变量

当前会话

会话的任何地方

@符号,不用指定类型

局部变量

定义他的begin end之间

begin end中的第一句话

不加@符号,要指定类型

总结

  • 本文对系统变量和自定义变量的使用做了详细的说明,知识点比较细,可以多看几遍,加深理解
  • 系统变量可以设置系统的一些配置信息,数据库重启之后会被还原
  • 会话变量可以设置当前会话的一些配置信息,对当前会话起效
  • declare创建的局部变量常用于存储过程和函数的创建中
  • 作用域:全局变量对整个系统有效、会话变量作用于当前会话、用户变量作用于当前会话、局部变量作用于begin end之间
  • 注意全局变量中用到了`@@`,用户变量变量用到了`@`,而局部变量没有这个符号
  • `delimiter`关键字用来声明脚本的结束符

Mysql系列目录

  1. 第1篇:mysql基础知识
  2. 第2篇:详解mysql数据类型(重点)
  3. 第3篇:管理员必备技能(必须掌握)
  4. 第4篇:DDL常见操作
  5. 第5篇:DML操作汇总(insert,update,delete)
  6. 第6篇:select查询基础篇
  7. 第7篇:玩转select条件查询,避免采坑
  8. 第8篇:详解排序和分页(order by & limit)
  9. 第9篇:分组查询详解(group by & having)
  10. 第10篇:常用的几十个函数详解
  11. 第11篇:深入了解连接查询及原理
  12. 第12篇:子查询
  13. 第13篇:细说NULL导致的神坑,让人防不胜防
  14. 第14篇:详解事务
  15. 第15篇:详解视图

MySQL 数组值求和 mysql 数组变量_MySQL 数组值求和

·END·