MySQL数据库(28):变量 variables

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据库(28):变量 variables

变量 variables

MySQL本质是一种编程语言

1、系统变量

对所有用户客户端都有效

1.1、查看系统变量

1、方式一

show variables [like 'pattern'];
• 1

示例

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+

2、方式二:

使用select查询变量的数据值

select @@变量名;
• 1
select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+

1.2、修改系统变量

1、局部修改(会话级别)


-- 只针对当前客户端当次连接有效

set 变量名 = 值;


-- eg:

set autocommit = 'off';

show variables like 'autocommit';



2、全局修改


-- 所有客户端,都有效

set global 变量名 = 值;

set @@global.变量名 = 值;


-- eg:

set global autocommit = 'off';



注意,全局修改之后,重启客户端生效


2、会话变量

也称为用户变量,设置的变量,只针对当前用户使用的客户端生效


-- 定义用户变量

set @变量名 = 值;


set @age = 23;



mysql中没有比较符号 == ,使用的是 =;

为了避免分不清是赋值还是比较,赋值使用:=


set @变量名 := 值;


set @name := 'Tom';



mysql允许将数据从表中取出存储到变量中,只能是一行数据


-- 1、赋值且查看赋值过程

select @变量1 := 字段1, @变量2 := 字段2 from 表 where 条件
select @name := name, @age := age from my_student limit 1;
+---------------+-------------+
| @name := name | @age := age |
+---------------+-------------+
| 刘备          |          18 |
+---------------+-------------+
--- 2、只赋值不看过程
select 字段1, 字段2 from 表 where 条件 into @变量1, @变量2;
select name, age from my_student limit 1 into @name, @age;


查看变量


select @变量名
mysql> select @name, @age;
+--------+------+
| @name  | @age |
+--------+------+
| 刘备   |   18 |
+--------+------+



3、局部变量

作用范围在begin到end语句块之间,在该语句块里设置的变量


declare语句用于定义局部变量

局部变量 declare语句出现在begin到end语句块之间

声明语法


declare 变量名 数据类型 [属性];

1

4、变量作用域

变量能够使用的区域范围


4.1、局部作用域

declare 关键字声明 (结构体中使用:函数/存储过程/触发器)


declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果再外部访问该变量,系统会自动认为是字段


4.2、会话作用域

用户定义的,使用@符号定义的变量,使用set关键字


会话作用域,当次连接有效只要再本连接中,任何地方都可以使用(可以在结构内容,也可以跨库)


会话变量可以再函数内部使用


set @name = '张三';
create function get_name() returns char(4)
return @name;
select get_name();
+------------+
| get_name() |
+------------+
| 张三       |
+------------+



会话变量可以跨库


use mydatabase2;
mysql> select @name;
+--------+
| @name  |
+--------+
| 张三   |
+--------+



4.3、全局作用域

所有的客户端,所有的连接都有效,需要使用全局符号来定义


set global 变量名 = 值;

set @@global.变量名 = 值;


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