[toc]
# 一、系統變量
系統變量分為全局變量(<b>global</b>)和會話變量(<b>session</b>)
說明:變量由系統定義,不是用戶定義,屬于服務器層面
注意:全局變量要加global關鍵字,若不寫默認是會話級別
~~~
//1.全局變量
show global variables; //查看所有全局變量
show global variables like "%char"; //查看滿足條件的部分全局變量
select @@global.autocommit; //查看指定的系統變量的值
set @@global.autocommit=0; //為變量賦值
//2.會話變量
show session variables; //查看所有會話變量,其他同上,就不一一贅述
~~~
# 二、自定義變量
自定義變量分為用戶變量和局部變量
說明:變量由用戶自定義,要求用戶聲明、賦值,然后才能使用
## 1.用戶變量
~~~
賦值操作符:=或:=
①聲明并初始化
SET @變量名=值;
SET @變量名:=值;
SELECT @變量名:=值;
②賦值(更新變量的值)
方式一:
SET @變量名=值;
SET @變量名:=值;
SELECT @變量名:=值;
方式二:
SELECT 字段 INTO @變量名
FROM 表;
③使用(查看變量的值)
SELECT @變量名;
~~~
## 2.局部變量
~~~
/*
作用域:僅僅在定義它的begin end塊中有效
應用在 begin end中的第一句話
*/
①聲明
DECLARE 變量名 類型;
DECLARE 變量名 類型 【DEFAULT 值】;
②賦值(更新變量的值)
方式一:
SET 局部變量名=值;
SET 局部變量名:=值;
SELECT 局部變量名:=值;
方式二:
SELECT 字段 INTO 具備變量名
FROM 表;
③使用(查看變量的值)
SELECT 局部變量名;
~~~
關鍵點:用戶變量和局部變量主要差別在<b>聲明</b>部分,用戶變量聲明用set,局部變量使用declare
# 三、存儲過程
含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
1、提高代碼的重用性
2、簡化操作
3、減少了編譯次數并且減少了和數據庫服務器的連接次數,提高了效率
## 1.創建語法
~~~
CREATE PROCEDURE 存儲過程名(參數列表)
BEGIN
存儲過程體(一組合法的SQL語句)
END
/*
注意:
1、參數列表包含三部分
參數模式 參數名 參數類型
舉例:
in stuname varchar(20)
參數模式:
in:該參數可以作為輸入,也就是該參數需要調用方傳入值
out:該參數可以作為輸出,也就是該參數可以作為返回值
inout:該參數既可以作為輸入又可以作為輸出,也就是該參數既需要傳入值,又可以返回值
2、如果存儲過程體僅僅只有一句話,begin end可以省略
存儲過程體中的每條sql語句的結尾要求必須加分號。
存儲過程的結尾可以使用 delimiter 重新設置
語法:
delimiter 結束標記
案例:
delimiter $
*/
~~~
## 2.調用語法
~~~
call 存儲過程名(實參列表);
~~~
案例演示:
~~~
案例1:創建存儲過程實現 根據女神名,查詢對應的男神信息
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
WHERE b.name=beautyName;
END;
調用
CALL myp2('柳巖');
~~~
# 四、函數
含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
1、提高代碼的重用性
2、簡化操作
3、減少了編譯次數并且減少了和數據庫服務器的連接次數,提高了效率
區別:
存儲過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新
函數:有且僅有1 個返回,適合做處理數據后返回一個結果
## 1.創建語法
~~~
CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
BEGIN
函數體
END
/*
注意:
1.參數列表 包含兩部分:
參數名 參數類型
2.函數體:肯定會有return語句,如果沒有會報錯
如果return語句沒有放在函數體的最后也不報錯,但不建議
return 值;
3.函數體中僅有一句話,則可以省略begin end
4.使用 delimiter語句設置結束標記
*/
~~~
## 2.調用語法
~~~
SELECT 函數名(參數列表)
~~~
案例演示
~~~
1.無參有返回
案例:返回公司的員工個數
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定義局部變量
SELECT COUNT(*) INTO c#賦值
FROM employees;
RETURN c;
END ;
SELECT myf1();
2.有參有返回
案例1:根據員工名,返回它的工資
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;#定義用戶變量
SELECT salary INTO @sal #賦值
FROM employees
WHERE last_name = empName;
RETURN @sal;
END ;
SELECT myf2('k_ing') ;
~~~