MySQL 基础 ———— 变量

一、MySQL系统变量

系统变量是由系统提供,属于服务器层面。

系统变量分为:全局变量会话变量

全局变量一般要加 GLOBAL 关键字,例如在《MySQL 基础 ————事务与隔离级别总结》中提到的 GLOBAL TRANSACTION,就属于全局变量,它针对所有连接都会生效,但是一旦MySQL服务重启,同样会失效

会话变量由 SESSION 关键字修饰,一般可以省略,比如  SET TRANSACTION ISOLATION ,这里的事务隔离级别设置就只针对当前会话,即当前连接。

二、查看系统变量

查看所有的全局或会话系统变量:

SHOW GLOBAL|SESSION VARIABLES;

查看满足条件的部分系统变量:

SHOW GLOBAL VARIABLES LIKE '%char%';

查看具体的变量值:

SELECT @@global.character_set_client;

SELECT @@character_set_client;

三、设置系统变量

系统变量可以被用户修改。有两种方式:

方式一:

SET GLOBAL|[SESSION] 系统变量名 = 值;

方式二:

SET @@global|[session].系统变量名 = 值;

比如,设置事务提交方式(查看事务提交方式:SELECT  VARIABLES  LIKE  'autocommit'  ):

-- 全局
SET GLOBAL autocommit = 0; 
SET @@global.autocommit = 0;

-- 当前会话
SET [SESSION] autocommit = 0;
SET @@[session].autocommit = 0;

四、自定义变量

自定义变量分为:用户变量局部变量

4.1 用户变量

用户变量要求必须带有@符号,只针对当前会话有效。可在当前会话中的任何地方使用,相当于针对本次连接的“全局变量”

赋值操作可以用 = 或 := 两种。

4.1.1 声明并初始化

SET @变量名 = 变量值;
SET @变量名 := 变量值;
SELECT @变量名 := 变量值;

4.1.2 赋值(更新用户变量的值)

上述初始化的三种方法依然适用,同时,也可以使用 SELECT INTO:

SELECT 字段 INTO @变量名 FROM 表;

4.1.3 使用用户变量

SELECT @变量名;

4.2 局部变量

局部变量的作用域仅仅在定义它的 BEGIN... END(存储过程)中有效。而且声明语句一定要在 BEGIN...END  中的第一句话

-- 声明
DECLARE 变量名 类型 [DEFAULT 默认值];
-- 赋值
SET 变量名 = 值;
SET 变量名 := 值;
SELECT @变量名 := 值;
SELECT 字段 INTO 变量名 FROM 表;
-- 使用局部变量
SELECT 变量名;

4.3 演示

1、用户变量演示:

SET @name = 'Morty';
SELECT @name; -- 输出 Morty [5Bytes]

SET @name = 100;
SELECT @name; -- 输出 100

SET @count = 1;
SELECT @count; -- 输出 1

SELECT COUNT(*) INTO @count FROM emp ;
SELECT @count; -- 输出 11

2、局部变量演示:

创建存储过程:

-- 创建存储过程
DELIMITER $
CREATE PROCEDURE emp_name_pro()
BEGIN
DECLARE emp_name VARCHAR(5) DEFAULT 'Moryt';
SELECT emp_name;
END $

调用存储过程:

CALL emp_name_pro;

五、用户变量与局部变量的比较

  作用域 定义和使用位置 语法
用户变量 当前会话 会话中的任何地方 必须加@,不用指定类型
局部变量 存储过程的定义中 BEGIN... END 的第一句 一般不用加@,必须限定类型
发布了191 篇原创文章 · 获赞 280 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/u014745069/article/details/103439748