[TOC]
# 变量
Mysql本质是一种编程语言,需要很多变量来保存数据。Mysql中很多的属性控制都是通过mysql中固有的变量来实现的。
## 系统变量
系统内部定义的变量,系统变量针对所有用户(MySQL客户端)有效。
查看系统所有变量:show variables [like ‘pattern’];
Mysql允许用户使用select查询变量的数据值(系统变量)
基本语法:select @@变量名;
修改系统变量:分为两种修改方式
1、 局部修改(会话级别):只针对当前自己客户端当次连接有效
基本语法:set 变量名 = 新值;
2、 全局修改:针对所有的客户端,“所有时刻”都有效
基本语法:set global 变量名 = 值; || set @@global.变量名 = 值;
全局修改之后:所有连接的客户端并没发现改变?全局修改只针对新客户端生效(正在连着的无效)
注意:如果想要本次连接对应的变量修改有效,那么不能使用全局修改,只能使用会话级别修改(set 变量名 = 值);
# 普通变量
不带@符号
定义:declare 变量名 类型名 [default 默认值]; //普通变量必须先这样定义
赋值形式:set 变量名=值; 取值:就直接使用变量名;
只能在编程环境中使用:1.定义函数内部2.定义存储过程的内部3.定义触发器的内部;
作用范围在begin到end语句块之间。在该语句块里设置的变量,declare语句专门用于定义局部变量。
1、 局部变量是使用declare关键字声明
2、 局部变量declare语句出现的位置一定是在begin和end之间(beginend是在大型语句块中使用:函数/存储过程/触发器)
3、 声明语法:declare 变量名 数据类型 [属性];
# 会话变量
带@符号
定义形式(其实也是赋值形式):set @变量名=值; 取值:就基本使用变量名
使用场所,哪里都可以
在mysql中因为没有比较符号==,所以是用=代替比较符号:有时候在赋值的时候,会报错:mysql为了避免系统分不清是赋值还是比较:特定增加一个变量的赋值符号: :=
Set @变量名 := 值;
Mysql是专门存储数据的:允许将数据从表中取出存储到变量中:查询得到的数据必须只能是一行数据(一个变量对应一个字段值):Mysql没有数组。
1、 赋值且查看赋值过程:select @变量1 := 字段1,@变量2 := 字段2 from 数据表 where 条件;
![](https://box.kancloud.cn/f76756235c0fe1445df1a87d93dc115a_2026x1266.jpg)
2、 只赋值,不看过程:select 字段1,字段2… from 数据源 where条件 into @变量1,@变量2…
![](https://box.kancloud.cn/3c28a46a4bc8714e14e7ace2ee57cdca_1940x926.jpg)
# 变量赋值有如下形式
1.(针对普通变量): set 变量名=表达式; #此语法中的变量必须先使用declare声明
2.(针对会话变量): set @变量名=表达式; #此方式可以无需declare语法声明,而是直接赋值
3.(针对会话变量): select @变量名 := 表达式; #此语句会给该变量赋值,同时会作为一个select语句输出结果集
4.(针对会话变量): select 表达式 into @变量名; #此语句虽然看起来是select语句,但其实并不输出结果集,而只是给变量赋值
- SQL
- 名词
- mysql
- 初识mysql
- 备份和恢复
- 存储引擎
- 数据表损坏和修复
- mysql工具
- 数据库操作
- 增
- 删
- 改
- 查
- 数据类型
- 整数类型
- 小数类型
- 日期时间类型
- 字符和文本型
- enum类型
- set类型
- 时间类型
- null与not null和null与空值''的区别
- 数据表操作
- 创建
- 索引
- 约束
- 表选项列表
- 表的其他语句
- 视图
- sql增删改查
- sql增
- sql删
- sql改
- sql查
- sql语句练习
- 连接查询和更新
- 常用sql语句集锦
- 函数
- 字符函数
- 数值运算符
- 比较运算符与函数
- 日期时间函数
- 信息函数
- 聚合函数
- 加密函数
- null函数
- 用户权限管理
- 用户管理
- 权限管理
- pdo
- 与pdo相关的几个类
- 连接数据库
- 使用
- pdo的错误处理
- pdo结果集对象
- pdo结果集对象常用方法
- pdo预处理
- 常用属性
- mysql编程
- 事务
- 语句块
- mysql中的变量
- 存储函数
- 存储过程
- 触发器
- mysql优化
- 存储引擎
- 字段类型
- 三范式和逆范式
- 索引
- 查询缓存
- limit分页优化
- 分区
- 介绍
- 分区算法
- list分区
- range范围
- Hash哈希
- key键值
- 分区管理
- 特别注意
- 分表
- 数据碎片与维护
- innodb表压缩
- 慢查询
- explain执行计划
- count和max,groupby优化
- 子查询优化
- mysql锁机制
- 介绍
- 演示
- 总结
- 乐观锁和悲观锁
- 扛得住的mysql
- 实例和故事
- 系统参数优化
- mysql体系结构
- mysql基准测试
- 索引
- mysql的复制
- win配置MySQL主从
- mysql5.7新特性
- 常见问题
- general log
- 忘记密码
- uodo log与redo log
- 事务隔离级别
- mysql8密码登录
- explain
- 高效的Tree表
- on delete cascade 总结
- mongod
- 简介
- 集合文档操作语句
- 增删改查
- 索引
- 数据导入和导出
- 主从复制
- php7操作mongod
- 权限管理
- redis
- redis简介
- 3.2版本配置文件
- 3.0版本配置文件
- 2.8版本配置文件
- 配置文件总结
- 外网连接
- 持久化
- RDB备份方式保存数据
- AOF备份方式保存数据
- 总结
- win安装redis和sentinel部署
- 事务
- Sentinel模式配置
- 分布式锁
- 管道
- php中redis代码
- 发布订阅
- slowlog
- Redis4.0
- scan和keys
- elasticsearch
- 配置说明
- 启动
- kibana
- kibana下载
- kibana配置文件
- kibana常用功能
- 常用术语
- Beats
- Beats简介
- Filebeat
- Packetbeat
- Logstash
- 配置
- elasticsearch架构
- es1.7
- head和bigdesk插件
- 插件大全
- 倒排索引
- 单模式下API增删改查
- mget获取多个文档
- 批量操作bulk
- 版本控制
- Mapping映射
- 基本查询
- Filter过滤
- 组合查询
- es配置文件
- es集群优化和管理
- logstash
- kibana
- es5.2
- 安装
- 冲突处理
- 数据备份
- 缺陷不足
- 集群管理api
- 分布式事务
- CAP理论
- BASE模型
- 两阶段提交(2PC)
- TCC (Try-Confirm-Cancle)
- 异步确保型
- 最大努力通知型
- 总结