MySQL基础之变量介绍和用法简介

举报
yd_273762914 发表于 2020/12/02 00:52:28 2020/12/02
【摘要】 本博客介绍一下MySQL中变量的用法和注意细节 文章目录 一、用户变量1.1、用户变量定义1.2、用户变量用法a)、设置用户变量b)、查询用户变量 二、系统变量2.1 系统变量简单介绍2.2 系统变量用法简介 一、用户变量 1.1、用户变量定义 MySQL官方手册里是将变量分为系统变量和用户变量的,用户变量就是在一个语句里加在用户自定义的变...

本博客介绍一下MySQL中变量的用法和注意细节

一、用户变量

1.1、用户变量定义

MySQL官方手册里是将变量分为系统变量和用户变量的,用户变量就是在一个语句里加在用户自定义的变量,然后这个变量可以赋值给其它变量,或者在另外一个语句里调用等,本博客基于MySQL5.7版本,其它版本的还是具体参考官方手册

【拓展】:
MySQL官方手册里是将变量分为系统变量和用户变量的,不过有些地方也将变量按照用法分为:1、临时变量(@符号的情况,也就是mysql手册介绍的用户变量);2、局部变量(declare方式);3、会话变量;4、全局变量(也就是系统变量),其实分类只是为了方便记录学习,重点是掌握用法原理就可以,因为局部变量和会话变量用的比较少,所以简单介绍一下
一、declare声明变量(局部变量)
declare声明变量:declare声明关键字可以用于定义变量,一般用于存储过程或者自定义函数里
a)、declare声明变量
用法:声明一个v1变量,定义为int类型,默认值为0;
declare v1 INT default 0;
b)、declare变量使用
声明后变量一般是在存储过程或者自定义里的,所以是写在begin和end关键字之间的,外面的不能直接定义,然后调用,所以declare也被称之为局部变量
二、session会话变量
session会话变量用的比较少,不过有个特性是和@临时变量是一致的,就是关闭会话,或者说关闭数据库连接的时候,变量是会失效的

1.2、用户变量用法

a)、设置用户变量

SET @var_name = expr [, @var_name = expr] ...
其实就是直接用关键字set就可以,例子

set @v1 =: 'test';

  
 
  • 1

或者直接省略冒号也是可以的,不过建议还是加上,以免有些情况获取不到数据

set @v1 ='test';

  
 
  • 1

其实,可以不用set关键字

select @v1 := 'test';

  
 
  • 1

查询时候直接赋值也是可以的,看起来@符合的用法比较灵活,并没有那么多约束。所以有些地方是将用这种用法称之为临时变量

b)、查询用户变量

查询变量:

select @[变量名];

  
 
  • 1

比如刚才的@v1临时变量

select @v1;

  
 
  • 1

备注:使用@符号的这种用法,在数据库连接的时候是有效的,当你关闭数据库连接的时候,变量值是会被置为Null值的,所以也是这种@符号用法set的变量被称之为临时变量的原因

【用法注意事项】:

  • 变量名称
    用户变量名称不区分大小写。名称的最大长度为64个字符,假如超过会报错:
Error Code: 3061
User variable name ${变量名} is illegal

  
 
  • 1
  • 2
  • 变量分配值
    用户变量分配值:整数,十进制,浮点,二进制或非二进制字符串或NULL值,如果为日期类型是不支持的

  • 分配给用户变量的十六进制或位值被视为二进制字符串。要将十六进制或位值作为数字分配给用户变量,可以使用加0或使用CAST(… AS UNSIGNED)的方式
    例子来自mysql官方手册

mysql> SET @v1 = X'41';
mysql> SET @v2 = X'41'+0;
mysql> SET @v3 = CAST(X'41' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A |   65 |   65 |
+------+------+------+
mysql> SET @v1 = b'1000001';
mysql> SET @v2 = b'1000001'+0;
mysql> SET @v3 = CAST(b'1000001' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A |   65 |   65 |
+------+------+------+

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 变量不要连续使用
    这种情况在手册已经指出来了,如图脚本:
mysql> SET @a:='test';
mysql> SELECT @a,(@a:=20)

  
 
  • 1
  • 2

可以查询出来,发现第一个变量还是’test’字符串,而第二个字符串却是另外一个值

【用户变量案例】:

介绍一下,变量来做类似oracle rownum的用法

oracle原版写法:

select * from (select id,name from t) where rownum <![CDATA[<=]]> to_number(num);

  
 
  • 1

mysql改写后的SQL:

SELECT * 
FROM
  (SELECT tb.*, @rownum := @rownum + 1 AS rownum FROM (SELECT id, NAME FROM t) tb, (SELECT @rownum := 0) r) AS t 
WHERE rownum <= CAST(num AS SIGNED INTEGER) ;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

二、系统变量

2.1 系统变量简单介绍

系统变量也称之为全局变量,系统变量是mysql的一些系统变量参数,一般不要修改,特别是生产环境

2.2 系统变量用法简介

用户变量的用法是用@符号,系统变量查询是用@@符号,参数有很多,比如:

  • 查询MySQL目录
SELECT @@basedir;

  
 
  • 1

在这里插入图片描述

  • 查看数据目录
select @@datadir;

  
 
  • 1

在这里插入图片描述

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/100889674

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。