存儲過程 定義 :將一批為了完成特定功能的SQL語句集,根據傳入的參數(也可沒有),調用,完成單個sql語句更複雜的功能 存儲過程思想很簡單,就是SQL語句層面上的代碼封裝和重用 優點 :1) 可封裝,並隱藏複雜的業務邏輯;2) 可回傳值,且可接受參數 缺點 :因支持的編程語言不通,性能調校和撰寫, ...
存儲過程
定義:將一批為了完成特定功能的SQL語句集,根據傳入的參數(也可沒有),調用,完成單個sql語句更複雜的功能
存儲過程思想很簡單,就是SQL語句層面上的代碼封裝和重用
優點:1) 可封裝,並隱藏複雜的業務邏輯;2) 可回傳值,且可接受參數
缺點:因支持的編程語言不通,性能調校和撰寫,受限於各種資料庫系統
創建存儲過程示例
delimiter $$
-- 創建存儲過程
create procedure p_user(
int m int, -- in 表示該參數是傳入參數,不能當作返回值
int n int,
out res int -- out 表示該參數是返回參數,只能作為返回值,不用於接收
-- inout 表示既可以接收傳入的值也可以當作返回值
)
begin
select username from user_info where uid between m and n;
set res=0;
end $$
delimiter ;
-- 1.在mysql中調用
set @res=10
call p_user(2,4,10); -- 該語句報錯
call p_user(2,4,@res) -- 正確的調用方式
select @res; -- 執行成功,@res變數的值發生改變
-- 2.在python中調用
pymysql連接mysql
獲取到游標對象cursor
通過游標對象cursor.callproc('p_user',(2,4,10))
# 參數內部原理:@_p_user_0=2,@_p_user_1=4,@_p_user_2=10
游標對象cursor.execute('select @_p_user_2;')
# 如果值發生改變,說明執行成功