文章目錄
存儲過程和函數的概念
存儲過程和視圖類似,都是一個事先寫好命令並編譯後存在數據庫中的MySQL語句集合。是用於簡化開發人員的工作,減少數據在數據庫和應用服務器之間傳輸,提高處理效率的。
存儲過程和函數的區別
既然是函數,就會有值的傳入和傳出,其中存在的區別爲:
存儲過程:參數的傳遞(參數類型)能用 IN 、 OUT 、 INOUT ,並且沒有直接的返回值。
IN 表示數據傳入
OUT 表示數據傳出
INOUT 表示既可以傳入又可以傳出
函數:參數只能使用IN,並且必須要有返回值。
存儲過程內不能使用 use 切換數據庫
存儲過程
存儲過程 語句(procedure)
無參存儲過程
創建無參存儲
delimiter
// ##開始創建存儲過程
create procedure 存儲過程名()
begin
#SQL語句1;
#SQL語句2;
#SQL語句3;
#SQL語句4;
end//
delimiter
MySQL執行的過程中,會以 ; 作爲結束命令
delimiter 是一個編譯器指令,告訴MySQL解釋器,MySQL是否可以執行了,該段命令是否已經結束了
delimiter 指令的使用
#將結束符變成別的用法
delimiter
#存儲過程
#結束符變成 ;
delimiter ;
調用存儲過程
call 存儲過程名();
call 存儲過程(變量);
查看存儲過程
show create procedure 存儲過程名;
刪除存儲過程
drop procedure 存儲過程名;
修改存儲過程
alter procedure 存儲過程名;
帶參存儲過程
創建帶參存儲過程
create procedure 存儲過程名(
in[out][inout] 參數名1 參數類型1,
in[out][inout] 參數名2 參數類型2,……,
in[out][inout] 參數名n 參數類型n)
begin
#SQL語句; end;
調用帶參存儲過程
call 存儲過程名(參數值1,參數值2,……,參數值n);
運用帶參存儲過程查詢數據
例如:
create procedure insert_stu(
in sname varchar(255) ,in sex enum('男','女'),in age int )
begin
##查詢插入的數據
select sname,sex,age;
##插入數據
insert into student_tb(s_name,s_sex,s_age)
value(sname,sex,age);
end$$
## 調用存儲過程
call insert_stu('小明','男',21);
call insert_stu('小李','女',20);
運用帶參存儲過程插入數據
例如:
create procedure put(in stu_no int,in stu_name varchar(30),
in stu_birthday date,
in stu_cno int)
begin
insert into student
values(stu_no,stu_name,stu_birthday,stu_cno);
end;
call putstr(11,'小海','2000-1-1',2);
會話變量
查看會話變量 當前連接有效 重新連接恢復默認值
其他的客戶端看不到自己定義的會話變量
## 查看會話變量
show session variables;
全局變量
當前服務器啓動時有效
重啓服務恢復默認值
## 查看全局變量
show global variables;
注意:有些變量都是系統自定義的,用於存儲數據庫中的默認數據
自定義函數
create function 函數名(函數參數 類型)
returns 返回值類型
begin
##邏輯代碼
return(函數返回值)
end;
8.0版本數據庫,增加了一個安全選項
需要執行一段下面的代碼才能創建函數
set global log_bin_trust_function_creators=TRUE;
調用函數
直接使用函數
select 函數名(函數參數);
函數參數可以用查詢的表格數據作爲參數
select 函數名(表格屬性) from 表格名
刪除函數
drop function 函數名;
存儲過程和函數的區別
1.函數只能返回一個變量,而存儲過程可以返回多個;
2.函數的限制比較多,不能用臨時表(select),只能用表變量,存儲過程限制少;
3. 存儲過程處理的功能比較複雜,而函數實現的數據科學計算針對性強;
4.存儲過程可以執行修改表的操作,但是函數不能執行一組修改全局數據庫狀態的操作;
5.存儲過程可以通過out返回多個參數,如記錄集,函數只能返回值或者表對象
總結
1.存儲過程的使用
2.函數的使用
3.函數和存儲過程的區別