系统整理Mysql学习笔记——变量

前言

变量是一个程序语言必不可少的一部分,sql也不例外,在sql中变量可以分为两种,系统变量和自定义变量。

系统变量

系统变量主要是指变量是由服务端来提供,不是用户自定义的。
系统变量根据范围分为全局级别和会话级别,它们只是范围的区别,变量都是一样的意思,所以下面的查看和修改系统变量的时候需要加上范围,如:
全局级别,需要加上GLOBAL,会话级别需要加上SESSION,如果不写默认是SESSION。

1 查看

1.1 查看全部系统变量
SHOW GLOBAL|[SESSION] VARIABLES;
1.2 查看满足条件的系统变量
# SHOW GLOBAL|[SESSION] VARIABLES LIKE '%条件%';
SHOW  VARIABLES LIKE '%C_AR%'; # 查看当前会话编码格式
1.3 查看指定某个系统变量的值
# SELECT @@GLOBAL|SESSION.系统变量名
SELECT @@GLOBAL.character_set_client;

2 赋值

2.1 为某个系统变量赋值
# SET GLOBAL|SESSION 系统变量名 = 值;
SET SESSION character_set_client='utf8';
# SET @@GLOBAL|SESSION.系统变量名 = 值;
SET @@SESSION.character_set_client='binary';

如果修改的是会话变量,那么这次修改仅仅支持当前会话有效,如果在其他会话的话,依然是未修改的值。

用户自定义变量

用户自定义变量是由用户自己定义的,而不是上面的直接由系统提供的,由此除了上面的查看和赋值以外还包括了声明。
用户自定义变量也可以根据范围分为用户变量和局部变量

  • 用户变量: 针对于当前会话有效,类似于上面的会话变量;
  • **局部变量:**仅仅在BENGINEND存储结构中有效,也必须在BENGINEND存储结构中第一句进行声明;

1 用户变量

声明并初始化
用户变量必须在声明的时候进行初始化,因此这两个可以看成是一体的。

SET @用户变量名=;
SET @用户变量名:=;
SELECT @用户变量名:=;

更新变量

可以使用上面声明并初始化的语法来更新变量,当然也可以使用下面的语句来更新变量

SELECT 字段 INTO @变量名
FROM 表名;

这个语句必须保证查询的字段是单一的一列,并且只有一个元素。

使用变量(查看、运算)

SELECT @变量名;

例子:

SELECT @data_ne:=50;  # 声明变量
SELECT @data_ne;    # 查看变量

SELECT age INTO @data_ne
FROM grade_new_9
WHERE ID=1;  # 更新变量
INSERT INTO `grade_new_9` (`id`,`seat`,`age`)VALUES(@data_ne+1,@data_ne+2,@data_ne);  # 使用变量

2 局部变量

局部变量用在BEGINEND存储结构中变量,只可以在这里使用,并且只可以在第一句就开始声明,作用域自然也是在一个存储结构中了,这点就和用户变量不同了,用户变量可以在任何地方使用。它同样是有声明、赋值以及使用

声明
和用户变量不同的是,局部变量不是一定需要在声明的时候赋值,可以在后面再此进行赋值;

DECLARE 变量名 类型;  # 声明
DECLARE 变量名 类型 DEFAULT;  # 声明并赋值

这里的类型就是mysql的基本数据类型。
赋值

SET 局部变量名=;
SET 局部变量名:=;
SELECT @局部变量名:=;
SELECT 字段 INTO @局部变量名
FROM 表名;

使用

SELECT 局部变量名;

例子
可以看出来用户变量和局部变量在声明、赋值和使用上还是有一些不同的。
如这里写一个简单的存储结构来测试局部变量

DELIMITER $$  # 定义结束符,默认结束符是分号
CREATE PROCEDURE `simple_pro`()  # 创建一个存储过程来测试局部变量
BEGIN
	DECLARE a INT;
	DECLARE b INT DEFAULT 5;
	SET a:=b*b;
	SELECT a,b;
END $$
CALL `simple_pro`()$$

结语

这样简单的变量就结束了,其实类似于java中变量,是一个存储临时值的单元,可以取用和修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值