mysql 变量声明及赋值的三种方式

摘要:
MySQL中有三种类型的变量:本地变量、系统变量和用户定义的变量。上述两个变量定义可以在BEGIN和END之间赋值后直接使用。使用自定义变量,可以直接赋值,而无需声明它们。
 

1.情景展示

  在mysql中,如何申明一个变量并进行使用?

  MySQL中主要有三种类型的变量:局部变量、系统变量及用户自定义变量。

2.局部变量(无前缀)

  2.1 声明变量

  作用域:BEGIN,END之间才能访问得到;

  适用范围:可以用在存储过程或函数中;

  使用前提:必须使用关键词DECLARE或者作为存储过程的输入或输出参数使用。

  说       明:

  多个变量的声明必须使用多个declare一一对应,否则会报错;

  定义变量的数据类型时,必须指定允许接收的最大字节数,否则会报错。

mysql 变量声明及赋值的三种方式第1张

  以上两种变量的定义方式,在BEGIN,END之间进行赋值之后,就能直接使用啦。

  2.2 变量赋值

  方式一:在定义变量的时候设置默认值;

  比如:

DECLARE
		V_END_NUMBER VARCHAR ( 50 ) DEFAULT '12345';

  需要提醒的一点是:在使用declare定义变量的时候,如果不设置默认值的话,它的初始化值=NULL。

  方式二:select cloumn1, cloumn2, ... into v_name1, v_name2, ... from table。

mysql 变量声明及赋值的三种方式第2张

  这里还涉及两种情况:

  当将查询结果塞给两个及以上变量时,INTO左边的字段和INTO右边的变量数量必须一一对应上才行,并且只能使用一个INTO;

  当将查询结果塞给一个变量时,可以将这个作为最后一个查询字段,并且可以使用INTO赋值,后面不能再跟其他字段。

3.系统变量(以@@为前缀)

  MySQL服务器维护许多系统变量配置为默认值。系统变量可以分为:

  GLOBAL类型:全局变量(影响服务器的整体操作);

  SESSION类型:会话变量(影响其对各个客户端连接的操作);

  BOTH类型:现在还不知道它是个啥。

  3.1 查询变量

  要查看正在运行的服务器使用的当前值,有两种方式:

  方式一:SHOW VARIABLES 语句或变量名;

  以自动提交为例:

mysql 变量声明及赋值的三种方式第3张

  方式二:SELECT @@变量名。

  以自动提交为例:

mysql 变量声明及赋值的三种方式第4张

  3.2 修改变量

  修改全局变量有2种方式:

SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;

  修改会话变量有4种方式:

SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;

4.自定义变量(以@为前缀)

  您可以访问任何用户定义的变量,而不声明它或初始化它;

  如果引用尚未初始化的变量,则它的值为NULL,并且类型为字符串;

  变量类型:整数,小数,浮点数,二进制或非二进制字符串或NULL;

  用户定义的变量是会话特定的。 也就是说,由一个客户端定义的用户变量不能被其他客户端看到或使用。

  使用自定义变量,无需声明直接赋值就可以啦。

  4.1 变量赋值

  方式一:使用set

  变形一:set @变量名=变量值

mysql 变量声明及赋值的三种方式第5张

  变形二:set @变量名:=变量值

mysql 变量声明及赋值的三种方式第6张  

  方式二:使用select

  注意:使用select赋值,必须使用“:=”,不能使用“=”,因为等于号在这里代表的含义是:比较;

  变形一:select @变量名:=变量值

mysql 变量声明及赋值的三种方式第7张

  变形二:select @变量名:=字段名 from table where ... limit 1;

mysql 变量声明及赋值的三种方式第8张

  说明:通过查表给变量赋值的方式,前提条件是查询结果只有一条记录;

  为什么要限定一条记录,因为变量只有一个值!下面我们可以进行一下测试:

mysql 变量声明及赋值的三种方式第9张

  看似变量userKey2有多个变量值,事实果真如此吗?

mysql 变量声明及赋值的三种方式第10张

  其实际结果只有一项,就是上面多条记录最末行的值。

  4.2 变量使用

  用法:@变量名

mysql 变量声明及赋值的三种方式第11张

  这样一来,就可以看出:使用局部变量最终是要服务于于SQL的,不然变量的定义没有任何意义。

  我们可以得出这样的结论:局部变量适用于SQL执行。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

免责声明:文章转载自《mysql 变量声明及赋值的三种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dubbo超时重试和异常处理一步一步CCNA之六:交换机vtp配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL查询一个表的总记录数的方法

一、简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ename, mgr FROM emp; SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 4. 查询指定行 S...

EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand

前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand;在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery有很大区别,FromSql返回值为IQueryable,因此为延迟加载的,可以与Linq扩展方法配合使用,但是有不少的坑(EFCore版本为1.1.0),直接...

PHP基础封装简单的MysqliHelper类

MysqliHelper.class.php 1: <?php 2: 3: /** 4: * MysqliHelper 5: * [面向对象的MysqliHelper的简单封装] 6: */ 7: class MysqliHelper 8: { 9: private static $mysqli; 10: private stat...

mysql8 安装,并且配置远程登录

1.下载mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz 安装包 下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz 2.解压mysql-8.0.18-linux-glibc2.12-x86_...

RedisTemplate常用集合使用说明-opsForSet(五)

 1、add(K key, V... values)   向变量中批量添加值。 Java代码   redisTemplate.opsForSet().add("setValue","A","B","C","B","D","E","F");     2、members(K key)   获取变量中的值。 Java代码   Set set = redis...

MySQL修改字符集

MySQL迁移乱码 一、字符集 1.1字符集常识 查看目前使用字符集 mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value...