mysql 五 儲存過程

2021-07-25 06:15:35 字數 3862 閱讀 6483

5.1什麼是儲存過程

帶有邏輯的sql語句

之前的sql沒有條件判斷,沒有迴圈

儲存過程帶上流程控制語句(if while)

5.2儲存過程的特點

1) 執行效率非常快!儲存過程在資料庫服務端執行

2)  移值性很差,不同資料庫不能一直

語法:

delimiter $   --

宣告結束符號

create

procedure

pro_test()

begin

--可寫多個sql語句

select × from

employee;

end $

-- 執行儲存過程

call pro_test();

引數帶有輸入引數的儲存過程

--需求傳入乙個員工的id,查詢員工資訊

//帶有輸入引數的儲存過程

delimiter $

create

procedure pro_findbyid(in eid int) --

in傳入引數

begin

select

*from emplotee where id =

eid;

end $

---呼叫

call pro_findbyid(4);

---帶有輸出引數的儲存過程

delimiter $

create

procedure pro_testout(out str

varchar(20)) --

out:輸出引數

begin

setstr

="這是乙個輸出引數"

end $

--刪除儲存過程

drop

procedure pro_testout;

--如何接受返回引數的值

--mysql全域性變數

參看所有全域性變數

--

show variables

模糊查詢全域性變數

--

show variables like "character_%"

接受資料編碼設定

--

character_set_client;

輸出資料編碼設定

--

character_set_results;

×××會話變數---只存在於當前客戶端與伺服器端的一次連線當中,如果鏈結斷開,那麼會話變數全部消失

定義乙個會話的變數

set

@name

='cx

'

檢視會話變數

select

@name;

×××區域性變數,只要儲存過程執行完畢,區域性變數就丟失

×××1)定義乙個會話變數name,2)使用name會話

call pro_testout(@name);

***帶有輸入輸出引數的儲存過程

delimiter $

create

procedure pro_testinuut(inout n int

)begin

select

n;

set n =

500;

end$

--帶有條件判斷的儲存過程

delimiter $

create procefure pro_testif(in num int , out str

varchar(20

))begin

if num =

1then

setstr

="星期一";

elseif num =2

then

setstr

="星期二";

else

setstr

="輸入有錯誤"

endif

;end$

call pro_testif(

1,@str

)select @ str;**

帶有迴圈過程的儲存過程

delimiter $

create

procedure pro_testwhile(in num int , out result int

)begin

declare i int

default1;

declare vsum int

default0;

while i <

=num do

set vsum = vsum +

i; i

= i +1;

endwhile

;

set result =

vsum;

end$

使用查詢的結果作為返回值

delimiter $

cretae

procedure pro_findbyid(in eid int, out vname varchar(20

))begin

select empname into vname from employee where id =

eid;

end $

---觸發器

觸發器作用

當我們操作了某張表時,希望同時觸發一些動作或者行為,就可以使用觸發器完成。

例如:當向員工表插入的插入一條記錄時,向日誌表插入一條資訊

--日誌表

create

table

test_log(

id

int priamry key

auto_increment,

content varcahr(

100)

);

--要求:當向員工表插入一條紀錄時,向mysql同時王日誌表插入資料

cerate trigger tri_empadd after insert

on employee for

each row

insert

into test_log(content) values('

向員工表插入的一條資料

'); //插入一條記錄的觸發器

cerate trigger tri_empadd after update

on employee for

each row

insert

into test_log(content) values('

向員工表修改的一條資料

'); //插入一條資料的觸發器

cerate trigger tri_empadd after delete

on employee for

each row

insert

into test_log(content) values('

向員工表刪除的一條資料

'); //刪除一條資料的觸發器

五 儲存過程

儲存過程 儲存過程是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。建立儲存過程 create procedure procedue name parameter data type outp...

MySQL高階五 儲存過程的管理

1 檢視資料庫的儲存過程 如 show procedure status where db caiwu 2 檢視當前資料庫下面的儲存過程的列表 如 select specific name from mysql.proc 3 檢視儲存過程的內容 如 select specific name,body...

實驗五 儲存管理實驗

include stdio.h include stdlib.h include time.h struct wuli 記憶體表 struct wuli wuli table 20 struct page 頁表 struct page page table 10 int allocate int w...