【MySQL进阶之路 | 基础篇】变量

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【MySQL进阶之路 | 基础篇】变量

1. 变量

在MySQL中,变量分为系统变量与用户自定义变量.系统变量又包括全局系统变量与会话系统变量. 而用户自定义变量又包括会话用户变量与局部变量.

2. 系统变量

(1). 系统变量

变量由系统定义,属于服务器层面. 启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL服务器内存中的系统变量赋值,这些变量定义了当前MySQL服务实例的属性和特征.

(2). 全局系统变量

全局系统变量需要添加GLOBAL关键字.如果不写,则默认会话系统变量.静态变量属于特殊的全局系统变量.

(3). 会话系统变量

每个MySQL客户机成功连接MySQL服务器后,都会产生与之对应的会话. 会话期间,MySQL服务实例会在MySQL服务器内存中生成与该会话对应的会话系统变量.

3. 查看系统变量

(1). 查看全局系统变量与会话系统变量

# 查看全局系统变量
SHOW GLOBAL VARIABLES;
# 查看会话系统变量
SHOW SESSION VARIABLES;

(2). 指定系统变量

MySQL中的系统变量以"@@"开头. 全局系统变量以"@@GLOBAL."开头,会话系统变量以"@@SESSION."开头.如果执行是"SELECT @@变量名",首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量.

3. 用户变量

(1). 用户变量

用户变量是用户自己定义的.根据作用范围,分为会话用户变量与局部变量.会话用户变量作用域在当前连接会话中有效.其以"@"开头.局部变量只在存储过程或函数中的BEGIN ... END语块中有效,其需要用DECLARE声明.

(2). 会话用户变量

SET @manbaout = 110;
SELECT @manbaout;

(3). 局部变量

CREATE PROCEDURE proce_id() 
BEGIN   
        # 局部变量
        DECLARE emp_id INT DEFAULT 0;
        SET emp_id  = 110;
        SELECT salary FROM employees WHERE employee_id = emp_id;
END;
 
CALL proce_id();

(4). 对比会话用户变量和局部变量

(1). 作用域

  • 会话用户变量作用域为当前连接的会话.
  • 局部变量的作用域为定义它的BEGIN ... END语块中.

(2). 定义位置

  • 会话用户变量可以定义在当前会话的任意位置.
  • 局部变量必须定义在BEGIN ... END语块的第一句话.

(3). 语法

  • 会话用户变量需要加"@"符号,不用指定类型.
  • 局部变量不需要加"@",但需要DECLARE声明,且在变量名后面添加变量类型,必须时还可以添加默认值DEFAULT 默认值.
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
|
1月前
|
存储 自然语言处理 关系型数据库
MySQL 自定义变量并声明字符编码
MySQL 自定义变量并声明字符编码
78 1
|
3月前
|
存储 关系型数据库 MySQL
mysql 使用变量存储中间结果的写法
mysql 使用变量存储中间结果的写法
|
4月前
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库进阶第五篇(锁)
MySQL数据库进阶第五篇(锁)
|
1月前
|
关系型数据库 MySQL 数据处理
企业级应用 mysql 日期函数变量,干货已整理
本文详细介绍了如何在MySQL8.0中使用DATE_FORMAT函数进行日期格式的转换,包括当日、昨日及不同时间段的数据获取,并提供了实际的ETL应用场景和注意事项,有助于提升数据处理的灵活性和一致性。
41 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
48 1
|
5月前
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南