儲存過程包含了一系列可執行的sql語句,儲存過程存放於mysql中,通過呼叫它的名字可以執行其內部的一堆sql
儲存過程的優點:
1.程式與資料實現解耦
2.減少網路傳輸的資料量
建立無參的儲存過程
**********=建立無參的儲存過程***************delimiter
//create
procedure
p1()
begin
select
*from
test;
insert
into test(username,dep_id) values('
egon
',1);
end//
delimiter ;
#呼叫儲存過程
#在mysql中呼叫
call p1();
#在python程式中呼叫
cursor.callproc('
p1')
對於儲存過程,可以接收引數,其引數有三類:
# in僅用於傳入引數用
# out 僅用於返回值用
# inout 既可以傳入又可以當作返回值
**********建立有參的儲存過程(in)***************delimiter
//create
procedure
p2(
in m int
, #從外部傳進來的值
in n int
)begin
insert
into test(username,dep_id) values ('
haha
',2),('
xixi
',3),('
sasa
',1),('
yanyan
',2);
select
*from test where id between m and
n;end
//delimiter ;
#呼叫儲存過程
call p2(
3,7); #在mysql中執行
#在python程式中呼叫
cursor.callproc('
p2',arg(3,7))
**********=建立有參的儲存過程(out)***************delimiter
//create
procedure
p3(
in m int
, #從外部傳進來的值
in n int
, out res
int)
begin
select
*from test where id between m and
n;
set res =
1;#如果不設定,則res返回null
end//
delimiter ;
#呼叫儲存過程
set@res
=11111
;call p3(
3,7,@res
);select
@res
; #在mysql中執行
#在python中
res=
cursor.callproc('
p3',args=(3,7,123)) #@_p3_0
=3,@_p3_1
=7,@_p3_2
=123
print(cursor
.fetchall()) #只是拿到儲存過程中select的查詢結果
cursor.execute('
select @_p3_0,@_p3_1,@_p3_2')
print(cursor.fetchall()) #可以拿到的是返回值
**********===建立有參儲存過程之inout的使用**********delimiter
//create
procedure
p4( inout m
int)
begin
select
*from test where id >
m;
set m=1;
end//
delimiter ;
#在mysql中
set@x=2
;call p4(
@x);
select@x;
*************************==
delimiter
//create
procedure
p5( inout m
int)
begin
select
*from test11111 where id >
m;
set m=1;
end//
delimiter ;
#在mysql中
set@x=2
;call p5(
@x);
select
@x; #這時由於不存在那個表就會報錯,檢視的結果就成2了。
--無引數call proc_name()
--有引數,全in
call proc_name(1,2)--
有引數,有in,out,inout
set@t1=0
;set
@t2=3;
call proc_name(
1,2,@t1,@t2)
dropprocedure proc_name;
#方式一:mysql:儲存過程
程式:呼叫儲存過程
#方式二:
mysql:
程式:純sql語句
#方式三:
mysql:
程式:類和物件,即orm(本質還是純sql語句)
importpymysql
conn = pymysql.connect(host = '
localhost
',user = '
root
',password='
123456
',database = '
lianxi
',charset = '
utf8')
cursor = conn.cursor(pymysql.cursors.dictcursor) #
以字典的形式輸出
#rows = cursor.callproc('p1') #1.呼叫儲存過程的方法 ,沒引數時
#rows = cursor.callproc('p2',args=(3,7)) #有引數時
rows = cursor.callproc('
p3', args=(3,7,123)) #
@_p3_0=3,@_p3_1=7 ,@_p3_2=123 #有引數時
conn.commit() #
執行print
(cursor.fetchall())
cursor.execute(
'select @_p3_0,@_p3_1,@_p3_2')
(cursor.fetchall())
cursor.close()
conn.close()
資料庫 儲存過程
儲存過程,stored procedure,是在大型資料庫系統中,一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。模擬於c中的函式。mysql與sqlserver是不同的。建立儲存過程 conn getconnec...
資料庫 儲存過程
在資料庫中,儲存過程屬於一種物件,是一種高效的安全的訪問資料庫的方法。下邊我們就資料庫中的儲存過程總結它的相關知識點。我們分為概述,實現和管理三個方面來總結。一,儲存過程的概述 1,概念 儲存過程 storedprocedure 是在資料庫伺服器端執行的一組t sql語句的集合,經編譯後存放在資料庫...
資料庫 儲存過程
一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果有引數 來執行它。系統儲存過程 以sp 開頭,用來進行系統的各項設定.取得資訊.相關管理工作。本地儲存過程 使用者建立的儲存過程是由使用者建立並完成某一特定功能的儲存過程,這跟各種程式語言裡使用...