MYSQL储存过程和储存函数和变量
儲存過程和儲存函數(shù)和變量
變量的應用:變量分類為: 系統(tǒng)變量和自定義變量
系統(tǒng)變量和全局變量還可以細分:
系統(tǒng)變量分類: 全局變量和會話變量
自定義變量分類: 用戶變量和局部變量
下面是變量的一些具體用法:
系統(tǒng)變量
說明:變量由系統(tǒng)提供,不是用戶定義,屬于服務器層面;
1.查看所有的系統(tǒng)變量:
show global| session variables;
(global全局變量,‘|’代表二選一,session會話變量)
2.產(chǎn)看滿足條件的部分系統(tǒng)變量:
show global | session variables like ‘模糊查詢’;
3.查看指定的某個指定系統(tǒng)變量的值:
select @@global | session.系統(tǒng)變量名;
4.為某個系統(tǒng)變量賦值(兩種方式):
set global| session 系統(tǒng)變量名=值;
set @@global| session.系統(tǒng)變量名=值;
5.使用系統(tǒng)變量:
select @用戶變量名;
注意: 如果是全局變量則需要加globle,如果是會話變量則加session,如果不寫則默認為會話變量。
6.全局變量的作用域:
服務器每一次啟動都會為所有的全局變量賦初始值,針對所有的會話(連接)有效,但是不能跨重啟。 會話變量的作用域: 僅僅針對于會話(連接)有效,
用戶變量
1.用戶變量作用域:針對于當前會話(連接)有效;
2.使用步驟:
聲明、賦值,使用 (自定義變量要求聲明的的同時必須初始化)
聲明并初始化(有三種方式):
set @用戶變量名 =值;
set @用戶變量名:=值;
select @用戶變量名:=值;
(初始化的同時也相當于給自定義變量第一次賦值)
賦值(有四種方式):
set @用戶變量名 =值;
set @用戶變量名:=值;
select @用戶變量名:=值;
select 字段 into 用戶變量名 from 表;
(要求查詢出來的字段值為一個,一組的話無法賦值)
eg: select count(*) into @name from employees;
3.用戶變量使用:
select @用戶變量名;
局部變量:
1.作用域:僅僅在定義它的begin and中有效;應用在begin and的第一句話
2.使用步驟:
聲明:DECLARE 變量名 類型;
聲明同時賦值:DECLARE 變量名 類型 DEFAULT 值;
賦值(四種方式):
(一個set語句可以為多個變量賦值,各個變量賦值語句之間用‘,’隔開)
set 局部變量名=值;
set 局部變量名:=值;
select @局部變量:=值;
select 字段 into 局部變量名 from 表 WHERE 限定條件;
3.使用局部變量:select 局部變量名;
例:
#1,查看系統(tǒng)的全局變量
show global variables;
#2.查看部分的全局變量
show global variables like ‘char%’;
#3.查看指定是某個全局變量
SELECT @@global.autocommit;
儲存過程
存儲過程和函數(shù)是事先經(jīng)過編譯并存儲在數(shù)據(jù)庫中的一段SQL語句的集合。
語法格式: create procedure 儲存過程名(參數(shù)列表) begin儲存過程體(sql語句) and1.參數(shù)列表包含三部分
參數(shù)模式 參數(shù)名 參數(shù)類型
舉例:
in stuname varchar(20);
2.如果儲存過程體中僅僅有一句話:begin and可以省略
3.
儲存過程體中每條SQL語句的結尾都必須要使用;結尾;
儲存過程的結尾可以使用delimiter重新設置語句結束標識符;
語法:delimiter 結束標記;
MySQL儲存過程的語句塊以begin開始,以end結束。語句體可以包含變量的聲明、控制語句、sql查詢語句等。由于儲存過程內(nèi)部語句要以分號結尾,所以出現(xiàn)在定義儲存過程之前,應將語句結束標志“;”更改為其他字符,并且因該降低該字符在儲存過程那個中出現(xiàn)的機率,更改結束標志可以使用delimiter關鍵字定義。
調(diào)用儲存過程語法
語法格式: call 儲存過程名(實參列表);對儲存過程中的參數(shù)模式具體分析
空參列表:
帶IN的參數(shù)列表
帶out的參數(shù)列表
帶INOUT的參數(shù)列表
儲存過程和儲存函數(shù)的區(qū)別
存儲過程和函數(shù)的區(qū)別:
? 函數(shù)必須有返回值,而存儲過程沒有。 ? 存儲過程的參數(shù)可以是IN、OUT、INOUT類型,函數(shù)的參數(shù)只能是IN 優(yōu)點: ? 存儲過程只在創(chuàng)建時進行編譯;而SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可以提高數(shù)據(jù)庫執(zhí)行速度。 ? 簡化復雜操作,結合事務一起封裝。 ? 復用性好 ? 安全性高,可指定存儲過程的使用權說明:
并發(fā)量少的情況下,很少使用存儲過程。 并發(fā)量高的情況下,為了提高效率,用存儲過程比較多。mysql變量的術語分類
1.用戶變量:以"@“開始,形式為”@變量名",由客戶端定義的變量。
用戶變量跟mysql客戶端是綁定的,設置的變量只對當前用戶使用的客戶端生效,當用戶斷開連接時,所有變量會自動釋放。
2.全局變量:定義時如下兩種形式,set GLOBAL 變量名 或者 set @@global.變量名
對所有客戶端生效,但只有具有super權限才可以設置全局變量。
3.會話變量:只對連接的客戶端有效。
4.局部變量:設置并作用于begin…end語句塊之間的變量。
declare語句專門用于定義局部變量。而set語句是設置不同類型的變量,包括會話變量和全局變量
語法:declare 變量名[…] 變量類型 [default 值]
declare定義的變量必須寫在復合語句的開頭,并且在任何其它語句的前面。
變量的賦值:
直接賦值: set 變量名=表達式值或常量值[…];
用戶變量的賦值:
1、set 變量名=表達式或常量值;
2、也可以將查詢結果賦值給變量(要求查詢返回的結果只能有一行)
例:set 列名 into 變量名 from 表名 where 條件;
3、select 值 into @變量名;
客戶端變量不能相互共享。
儲存函數(shù)
創(chuàng)建語法:create FUNCTION 函數(shù)名(參數(shù)列表) RETURNS 返回類型begin 函數(shù)體AND 注意:參數(shù)列表包含兩部分:參數(shù)名 參數(shù)類型(函數(shù)體不定會有return語句,如果ruturn語句沒有放在函數(shù)體最后也不會報錯,但是不建議)當函數(shù)體只有一句話的時候,begin and可以省略delimiter 語句設置結束的標識符;2.調(diào)用函數(shù)
SELECT 函數(shù)名(參數(shù)列表);查看儲存過程和儲存函數(shù)
show cerate {procedure| function} 存儲過程名;刪除儲存過程和儲存函數(shù)
drop {PROCEDURE | FUNCTION } 存儲過程名;總結
以上是生活随笔為你收集整理的MYSQL储存过程和储存函数和变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.IO字节流和字符流详解
- 下一篇: 认识Python(day01)