相关文章推荐
心软的夕阳  ·  解决Docker启动MySQL多实例时因共享 ...·  4 月前    · 
讲道义的烈酒  ·  Debezium-JSON--流式计算 ...·  1 月前    · 
奔跑的创口贴  ·  无需添加引号使PostgreSQL标识符区分 ...·  1 周前    · 
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复 ...·  6 天前    · 
读研的冲锋衣  ·  MySQL循环插入日期递增数据报错:语法问题 ...·  6 天前    · 
跑龙套的牙膏  ·  2025【私立前三】南京高中学校学费一览表- ...·  10 月前    · 
从未表白的墨镜  ·  《Unity ...·  1 年前    · 
至今单身的牛排  ·  nginx 127.0.0.1可以访问 ...·  1 年前    · 
豪情万千的土豆  ·  计算机视觉最前沿进展2021年8月15日到2 ...·  1 年前    · 
豪爽的花生  ·  AttributeError: ...·  1 年前    · 
Code  ›  MySQL变量介绍和用法简介开发者社区
mysql数据库 变量 select mysql
https://cloud.tencent.com/developer/article/1513452
谦虚好学的罐头
2 年前
作者头像
SmileNicky
0 篇文章

MySQL变量介绍和用法简介

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Nicky's blog > MySQL变量介绍和用法简介

MySQL变量介绍和用法简介

作者头像
SmileNicky
发布 于 2019-09-25 16:21:17
2.9K 0
发布 于 2019-09-25 16:21:17
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接: https://blog.csdn.net/u014427391/article/details/100889674

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

文章目录
  • 一、用户变量
    • 1.1、用户变量定义
    • 1.2、用户变量用法
      • a)、设置用户变量
      • b)、查询用户变量
  • 二、系统变量
    • 2.1 系统变量简单介绍
    • 2.2 系统变量用法简介

一、用户变量

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';

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

set @v1 ='test';

其实,可以不用set关键字

select @v1 := 'test';

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

b)、查询用户变量

查询变量:

select @[变量名];

比如刚才的@v1临时变量

select @v1;

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

【用法注意事项】:

  • 变量名称 用户变量名称不区分大小写。名称的最大长度为64个字符,假如超过会报错:
Error Code: 3061
User variable name ${变量名} is illegal
  • 变量分配值 用户变量分配值:整数,十进制,浮点,二进制或非二进制字符串或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 |
+------+------+------+
  • 变量不要连续使用 这种情况在手册已经指出来了,如图脚本:
mysql> SET @a:='test';
mysql> SELECT @a,(@a:=20)

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

【用户变量案例】:

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

oracle原版写法:

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

mysql改写后的SQL:

SELECT 
  (SELECT 
    tb.*,
    @rownum := @rownum + 1 AS rownum 
    (SELECT 
 
推荐文章
心软的夕阳  ·  解决Docker启动MySQL多实例时因共享数据卷导致的连接报错-开发者社区-阿里云
4 月前
讲道义的烈酒  ·  Debezium-JSON--流式计算 Flink版-火山引擎
1 月前
奔跑的创口贴  ·  无需添加引号使PostgreSQL标识符区分大小写:MySQL迁移至PostgreSQL的SQL查询适配求助
1 周前
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复插入如何解决?
6 天前
读研的冲锋衣  ·  MySQL循环插入日期递增数据报错:语法问题排查求助
6 天前
跑龙套的牙膏  ·  2025【私立前三】南京高中学校学费一览表-南京安生(托马斯)学校
10 月前
从未表白的墨镜  ·  《Unity 3D增强现实开发实战》电子书在线阅读-吴哲夫 陈滨 著-得到APP
1 年前
至今单身的牛排  ·  nginx 127.0.0.1可以访问 ip不能访问 - CSDN文库
1 年前
豪情万千的土豆  ·  计算机视觉最前沿进展2021年8月15日到2021年8月21日-腾讯云开发者社区-腾讯云
1 年前
豪爽的花生  ·  AttributeError: 'NoneType' object has no attribute 'setText - CSDN文库
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号