/*進階17 變數
系統變數:
    全域性變數:
    會話變數:
    
自定義變數:
    使用者變數:
    區域性變數:

*/
/*
#一: 系統變數
#說明: 變數由系統提供,不是使用者定義的,屬於伺服器層面
#使用的語法

#1/檢視所有的系統變數,
show global /[session] variables;

2.檢視滿足條件的部分系統變數
show global/[session] variables like '%char%';

3.檢視指定的某個系統變數的值
select @@global/[session] .系統變數名;

4.為某個系統變數賦值
方式一:
    set global/[session] 系統變數名=值;
方式二:
    set @@global/[session].系統變數名=值;

注意:
    如果是全域性級別,則需要加上global;
    如果是會話級別,則需要加上session ;【如果不寫,預設是這個】
*/
/*
#2>> 會話變數
  作用域 : 僅對當前會話(查詢的sql檔案 / 連線) 有效

#① : 檢視所有的會話變數
SHOW  VARIABLES;    #547行
SHOW SESSION VARIABLES;  #547行

#② : 檢視部分的會話變數
SHOW VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%'; 

*/
/*
#2>> 會話變數
  作用域 : 僅對當前會話(查詢的sql檔案 / 連線) 有效

  對比使用者變數和區域性變數:
              作用域       定義和使用的位置           語法
   使用者變數:   當前會話    會話中的任何地方           必須加@符號,不用限定型別
    
   區域性變數:   begin end中  只能在begin end中,且      一般不用加@符號,需要限定型別
                 為第一句話
  
  
*/
#1》 全域性變數
    #① 檢視所有的全域性變數
SHOW GLOBAL VARIABLES;
    #② 檢視部分的全域性變數
SHOW GLOBAL VARIABLES LIKE 'character%';
    #③ 檢視指定的全域性變數
SELECT @@global.autocommit;  #1

#④: 為某個指定的全域性變數賦值
SET @@global.autocommit=0;   #0

#2>> 會話變數
/*
  作用域 : 僅對當前會話(查詢的sql檔案 / 連線) 有效
*/

#① : 檢視所有的會話變數
SHOW  VARIABLES;    #547行
SHOW SESSION VARIABLES;  #547行

#② : 檢視部分的會話變數
SHOW VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%'; 

#③ : 檢視指定的某個會話變數
     #select @@tx_isolation;  #不支援
#select @@session.tx_isolation; #不支援查詢隔離級別

#④ : 為某個會話變數賦值
    #set @@tx_isolation='read-uncommitted'; #不支援更改隔離級別
    #SET session @@tx_isolation='read-uncommitted';

#二: 自定義變數
/*
    說明: 變數是使用者自己進行定義的,不是由系統提供的;
    使用步驟: 宣告/賦值/使用(檢視/比較/運算等..)
        
*/

#1.使用者變數
    #作用域:針對當前會話(連線)有效,同於會話變數的作用域
#賦值的操作符: =或:=
    #① 宣告並初始化
    SET @使用者變數名=值;
    SET @使用者變數名:=值;
    SELECT @使用者變數名:=值;
    
#方式二:通過select into
    SELECT 欄位 INTO 變數名
    FROM 表;
#輸出結果
    SELECT @num;

#案例:
    SET @name='john';
    SET @name=100;
        #宣告並初始化
    SELECT COUNT(*) INTO @num
    FROM employees;

    SELECT @num;
#-----------------------------
 
 #2.區域性變數 ------沒辦法實踐!!實踐錯!!!!
/*
    作用域:僅僅作用在定義它的begin end中有效
    應用在begin end中的第一句話
    
*/
#① 宣告
DECLARE 變數名 型別;
DECLARE 變數名 型別 DEFAULT 值;
#① 賦值
    SET 區域性變數名=值;
    SET 區域性變數名:=值;
  SELECT @使用者變數名:=值;    
   #方式二:通過select into
    SELECT 欄位 INTO 區域性變數名
    FROM 表;
#③ 使用
SELECT 區域性變數名;
# 案例---------------

#1.使用使用者變數實現加法
SET @m=1;
SET @n=2;
SET @sum=@m+@n;
SELECT @sum;

#2.使用區域性變數實現加法