#变量
/*
variable
1.分类:
系统变量
    全局变量
    会话变量
自定义变量
    用户变量
    局部变量
*/

#一、系统变量
/*
1.作用域
全局变量:服务器每次启动将所有全局变量赋值。
      针对所有会话连接有效,但不能跨重启,即重启服务器即恢复原初始值,若要实现跨服务器需修改配置文件
会话变量:仅仅针对于当前会话连接有效    

2.说明:
变量由系统提供,不是用户定义,属于服务器层面
3.语法:
(GLOBAL|SESSION位置不写时,默认为会话变量)
1.查看所有的系统变量
       全局/会话
SHOW GLOBAL/SESSION VARIABLES;

2.查看满足条件的部分系统变量
       全局/会话
SHOW GLOBAL/SESSION VARIABLES LIKE '%char%';#查看包含char字符的系统变量

3.查看指定的某个系统变量的值
SELECT @@GLOBAL/SESSION.系统变量名;

4.为某个系统变量赋值
方式一:
SET GLOBAL/SESSION 系统变量名=值;

方式二:
SET @@GLOBAL/SESSION.系统变量名=值;

*/
#演示:
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;

SHOW GLOBAL VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%';

SELECT @@GLOBAL.autocommit;

SELECT @@tx_isolation;

SET @@GLOBAL.autocommit=0;

SET GLOBAL autocommit=1;

#二、自定义变量
/*
1.使用步骤
a.声明 b.赋值 c.使用(查看、比较、运算)

2.作用域:
用户变量:针对当前对话连接有效,应用在任何地方,也就是begin end里面或外面都可以
局部变量:仅仅定义在它所在的begin end 中有效,只能在begin end第一句话

3.对比

#用户变量和局部变量的对比
        作用域            定义位置        语法
用户变量    当前会话        会话的任何地方        加@符号,不用指定类型
局部变量    定义它的BEGIN END中     BEGIN END的第一句话    一般不用加@,需要指定类型

*/
#1.用户变量
/*
赋值的操作符:=或:=
#1.声明并初始化
set @用户变量名=值;或
set @用户变量名:=值;或
select @用户变量名:=值;

#2.赋值
方式一:
set @用户变量名=值;或
set @用户变量名:=值;或
select @用户变量名:=值;
方式二:
Select 字段 into @变量名
from 表名;

#3.使用(查看用户变量的值)
Select @用户变量名;

*/
#案例:
SET @name='jj';
SET @name:='gg';
SELECT @name:='xx';
SELECT @name;

SET @count:=0;
SELECT COUNT(*) INTO @count
FROM employees;
SELECT @count;


#2.局部变量
/*
声明:
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;

赋值(set不用@符号)
方式一:
SET 局部变量名=值;或
SET 局部变量名:=值;或
SELECT @局部变量名:=值;
方式二:
SELECT 字段 INTO 局部变量名
FROM 表名;

使用:
SELECT 局部变量名;

*/



#案例:声明两个变量,求和并打印

#用户变量
SET @m=1;
SET @n=2;
SET @sum=@m+@n;
SELECT @sum;

#局部变量 
DECLARE m INT DEFAULT 1;
DECLARE n INT DEFAULT 1;
DECLARE SUM INT;
SET SUM=m+n;
SELECT SUM;