【MySQL】变量

在MySQL中变量可以分为三类:系统变量、用户自定义变量、以及局部变量。

首先聊聊系统变量

系统变量是MySQL服务器的配置变量,控制着服务器的行为和性能。分为全局变量(GLOBAL)和会话变量(SESSION)。

在Linux中的MySQL的配置文件默认是在:/etc/mysql/mysql.conf.d/下里有mysqld.cnf里面有很多系统变量

查看系统变量

sql 复制代码
-- 查看所有系统变量
SHOW [GLOBAL|SESSION] VARIABLES;
-- 查看指定的系统变量
SHOW [GLOBAL|SESSION] VARIABLES LIKE 'xxx';
-- 查看指定的系统变量,可以通过LKIE进⾏模糊查询
SHOW [GLOBAL|SESSION] VARIABLES like '%xxx%';
-- 使⽤SELECT查看指定系统变量
SELECT @@[GLOBAL|SESSION].系统变量名;
-- ----------------------------------------------------
-- ⽰例:查看以auto开头的全局系统变量
SHOW GLOBAL VARIABLES LIKE 'auto%';
-- ⽰例:查看以char开头的会话系统变量
SHOW SESSION VARIABLES LIKE 'char%';
-- ⽰例:查看事务⾃动提交全局系统变量
SELECT @@GLOBAL.autocommit;

设置系统变量:

sql 复制代码
SET [GLOBAL|SESSION] 系统变量名 = 值;
SET @@SESSION.系统变量名 = 值;
-- -------------------------------------------
-- ⽰例:设置事务⾃动提交会话变量为关闭/开启
SET @@SESSION.autocommit = 0;
SET autocommit = 1;

注意:

如果没有指定GLOBAL|SESSION,默认设置会话(SESSION)全局变量

会话关闭后,设置的会话(SESSION)变量失效;新建的会话读取全局系统变量的值做为初始值。

MySQL重启后,设置的全局(GLOBAL)变量失效,如果想使全局系统变量永久生效,需要修改选

项文件


用户自定义变量

用户自定义变量是在SQL会话中定义的变量,不用提前声明,作用域为当前会话。

赋值操作主要包括两种= 和:=:

举个例子:

sql 复制代码
-- ⽰例:定义⼀个age变量并赋值为18,并查看
SET @age := 18;
SELECT @age;
-- ⽰例:从学⽣表中查询编号为1的学⽣学号并赋值给sno变量
SELECT sno INTO @sno from student where id = 1;
SELECT @sno;
-- ⽰例:查询学⽣表中的总记录数并赋值给conut变量
SELECT count(*) INTO @count from student;
SELECT @count;
-- ⽰例:访问⼀个未赋值的变量,返回NULL
SELECT @var;

由于SQL中比较比较相等也是用等号 (=),所以在为变量赋值的时候推荐使用 ( := ),只要是赋值,就用:=就完了。


局部变量
局部变量只在存储过程、函数或触发器的范围内有效 。需要使用 DECLARE 声明,作用域的范围在声明的 BEGIN ... END 块内

变量可以是任何有效的MySQL数据类型,如 INT 、 VARCHAR 、 DATETIME 等

cpp 复制代码
DECLARE 变量名 变量类型 [DEFAULT 默认值] ...;

举个例子:

sql 复制代码
delimiter //
-- 定义存储过程
create procedure p1()
BEGIN
-- 定义局部变量
  declare stu_count int default 0;
  select count(*) into stu_count from student;
  select stu_count;
END//
delimiter ;

call p1();

部变量在存储过程或函数结束时失效

相关推荐
minji...9 小时前
MySQL数据库 (五) MySQL表的约束(上),非空约束,默认值约束,零填充约束,主键约束,符合主键
数据库·mysql·表的约束·主键约束·非空约束·复合主键·零填充约束
拾贰_C9 小时前
【python | installation 】python 安装 | Windows | 命令使用
linux·数据库·ubuntu
贺今宵9 小时前
Vue 3 + Capacitor 使用jeep-sqlite,web端使用本地sqlite数据库
前端·数据库·vue.js·sqlite·web
列星随旋9 小时前
MySQL面经整理
数据库·mysql
AllData公司负责人9 小时前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与Chat2DB开源项目,建设Text2SQL生产场景全新体验的数据源平台!
数据库·人工智能·text2sql·数据中台·数据源·chat2db·智谱大模型
是一个Bug10 小时前
MySQL 核心知识梳理:从底层原理到实战优化
mysql
minji...10 小时前
MySQL数据库 (四) MySQL的数据类型,tinyint,float,decimal,枚举enum和集合set
数据库·mysql·tinyint·enum·decimal·varchar·bit
阿演10 小时前
DataDjinn 新版本更新:国产数据库支持、连接树体验、AI 查询和表格编辑继续增强
数据库·人工智能·ai·ai编程
一只fish11 小时前
Oracle官方文档翻译《Database Concepts 26ai》附录-术语表
数据库·oracle
一只fish11 小时前
Oracle官方文档翻译《Database Concepts 26ai》第23章-数据库开发者概念
数据库·oracle