mysql 過程和函式 MySQL 儲存過程和函式

2021-10-18 02:31:04 字數 4154 閱讀 8385

變數

系統變數

變數由系統提供,不是使用者自定義的,屬於伺服器層面

全域性變數

會話變數

# 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話

# 檢視全域性變數

show global variables;

show global variableslike "%char%";

# 檢視會話變數

show session variables; # 預設是會話變數

show session variableslike "%char%";

# 檢視指定的某個系統變數的值select @@系統變數名; # 預設檢視的是會話變數select @@global.系統變數名;

# 為系統變數賦值set global|[session] 系統變數名=值; # 預設是會話變數set @@global|[session].系統變數名=值; # 預設是會話變數

自定義變數

使用者自定義的變數

使用者變數:針對於當前會話連線有效,同於會話變數的作用域

# 申明並初始化set @使用者變數名=值;set @使用者變數名:=值;select @使用者變數名:=值;

# 賦值或更新使用者變數的值set @使用者變數名=值;set @使用者變數名:=值;select @使用者變數名:=值;select 字段 into 變數名 from表select count(*) into @count1 fromstudent;

# 檢視使用者變數名select @使用者變數名;

區域性變數:僅僅在begin end中有效,應用在begin end的第一句話

# 宣告declare變數名 型別;declare 變數名 型別 default值;

# 賦值set 區域性變數名=值set 區域性變數名:=值select @區域性變數名:=值select 字段 into @區域性變數名 from表;

#檢視select 區域性變數名

區域性變數和使用者變數

使用者變數:  當前會話               會話的任何地方定義和使用                  必須加@符號,不用限定型別

區域性變數:  begin  end中     只能在begin end中,且為第一句話       一般不加@符號,需要限定型別

儲存過程

介紹一組預先編譯好的sql語句的集合,理解成批處理語句

提高**的重用性

簡化操作

減少了編譯次數,並且減少了和資料庫伺服器的連線次數,提高了效率

建立create procedure儲存過程名(引數列表)begin儲存過程體(一組合法的sql語句)end

注意:引數列表包含三個部分 引數模式  引數名  引數型別

如果儲存過程體僅僅只有一條語句,begin end可以省略

儲存過程體中的每條sql語句的結尾必須要加分號

儲存過程的結尾可以使用delimiter重新設定

引數模式:

in: 該引數可以作為輸入,也就是該引數需要呼叫方法傳入值

out: 該引數可以作為輸出,也就是該引數可以作為返回值

inout: 既可以作為輸入也可以作為輸出,既要傳入值,也可以返回值

呼叫call 儲存過程名(實參列表);

案例/*1. 空參列表

案例1: 插入到admin表中五條記錄

delimiter $

create procedure myp1()

begin

insert into admin(name, `password`)

values('jhon1', "000"),('jhon2',"001");

end $

call myp1()$

select * from admin$

2. in模式引數, 預設是in

案例: 建立儲存過程實現 根據girl name 查詢對應的boy資訊

create procedure myp2(in g_name varchar(20) )

begin

select b.* from boys b right join girls g on b.id=g.boy_id where g.name=g_name;

end $

call myp2('mary')$

案例: 建立儲存過程實現,使用者是否登入成功

create procedure myp3(in name varchar(20), in password varchar(20))

begin

declare res int default '';

select count(*) into res from admin where admin.name=name and admin.password=password;

select if(res>0,'successfule','failed');

end $

call myp3('root','123')$

3. out模式的儲存過程

案例: 根據girl name ,返回boy name

create procedure myp5(in girl_nam varchar(20), out boy_name varchar(20), out age int)

begin

select b.name,b.age into boy_name,age from boys b inner join girls g on b.id=g.boy_id where g.name=girl_name;

end $

call myp5('mary', @bname, @age)$

select @banme,@age$

4. inout 模式引數

案例: 傳入a和b兩個值。最終a和b都翻倍並返回

create procedure myp6(inout a int, inout b int)

begin

set a=a*2;

set b=b*2;

end $

set @a=20$

set @b=20$

call myp6(@a,@b)$

select @a,@b$

刪除儲存過程

drop procedure 儲存過程名

檢視儲存過程

show create procedure 儲存過程名

函式介紹

一組預先編譯好的sql語句的集合,理解成批處理語句

提高**的重用性

簡化操作

減少了編譯次數,並且減少了和資料庫伺服器的連線次數,提高了效率

對比儲存

儲存過程: 可以有0或多個返回, 適合做批量插入、批量更新

函式       :  有且僅有乙個返回,適合做處理資料後返回乙個結果

建立create function函式名(引數列表) returns返回型別begin函式體end

注意:引數列表包含兩部分: 引數名  引數型別

函式體必須有return語句:  return 值

函式體僅有一句話時,可以省略begin end

使用delimiter語句設定結束標記

呼叫select 函式名(引數列表)

案例/*1. 無引數返回

案例: 返回員工個數

delimiter $

create function myf1 returns int

begin

declare c int default 0;

select count(*) into c from employees;

return c;

end $

select myf1()$

2. 有引數返回

案例: 根據員工名,返回他的工資

create function(name varchar(20)) returns double

begin

set @sal=0;

select salary into @sal from employees e where e.name =name;

return @sal;

endselect myf2('jhon')$*/

檢視函式

show create function 函式名

刪除函式

drop function 函式名;

mysql過程函式 mysql 儲存過程和函式

乙個儲存程式是可以被儲存在伺服器中的一套sql語句。可以通過客戶端用create procedure和create function 建立乙個儲存過程或函式。在客戶端通過call語句 呼叫所建立的存數過程或函式。語法 建立儲存子程式 create procedure sp name proc par...

Mysql 儲存過程和函式

一 儲存過程 procedure 本質上沒區別,執行的本質都一樣。只是函式有如 只能返回乙個變數的限制。而儲存過程可以返回多個。函式是可以嵌入在sql中使用的,可以在select中呼叫,而儲存過程要讓sql的query 可以執行,需要把 mysql real connect 的最後乙個引數設定為cl...

mysql儲存過程和函式

儲存過程是一系列sql語句集,具有靈活性,速度快,批處理 安全等特點 缺點 程式設計複雜 需要建立資料庫物件的許可權 掌握儲存過程的定義 檢視 修改 刪除 定義儲存過程 create procedure pro name parameter type characteristic routine b...