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 $
--刪除儲存過程
dropprocedure 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 $
---觸發器
觸發器作用
當我們操作了某張表時,希望同時觸發一些動作或者行為,就可以使用觸發器完成。
例如:當向員工表插入的插入一條記錄時,向日誌表插入一條資訊
--日誌表
createtable
test_log(
id
int priamry key
auto_increment,
content varcahr(
100)
);
--要求:當向員工表插入一條紀錄時,向mysql同時王日誌表插入資料
cerate trigger tri_empadd after inserton employee for
each row
insert
into test_log(content) values('
向員工表插入的一條資料
'); //插入一條記錄的觸發器
cerate trigger tri_empadd after updateon employee for
each row
insert
into test_log(content) values('
向員工表修改的一條資料
'); //插入一條資料的觸發器
cerate trigger tri_empadd after deleteon 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...