mysql 儲存過程丟失 mysql儲存過程的學習

2021-10-18 10:12:25 字數 2404 閱讀 7146

儲存過程的介紹

儲存過程(stored procedure)是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。

儲存過程的優點

(1) 減少網路通訊量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,呼叫乙個行數不多的儲存過程與直接呼叫sql語句的網路通訊量可能不會有很大的差別,可是如果儲存過程包含上百行sql語句,那麼其效能絕對比一條一條的呼叫sql語句要高得多。

(2) 執行速度更快。儲存過程建立的時候,資料庫已經對其進行了一次編譯。以後在執行儲存過程的時候就不需要在進行編譯,但是一般sql語句沒執行一次就需要編譯一次,所以使用儲存過程可以提高資料庫執行速度。其次,儲存過程一旦執行,在記憶體中就會保留乙份這個儲存過程,這樣下次再執行同樣的儲存過程時,可以從記憶體中直接中讀取。

(3) 更強的安全性。儲存過程是通過向使用者授予許可權(而不是基於表),它們可以提供對特定資料的訪問,提高**安全,比如防止 sql注入。

(4) 業務邏輯可以封裝儲存過程中,這樣不僅容易維護,而且執行效率也高

儲存過程的缺點

(1)移植性差,當更換資料庫時,之前編寫的儲存過程就要進行相應的調整。

(2)重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

(3) 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。

儲存過程簡單語法

因為mysql的預設語句結束符是分號;為了避免與儲存過程中sql語句結束符衝突所以要先定義分隔符,我們這裡定義//為分隔符,我們使用delimiter //這樣的語法,就可以定義結束符了,當然你可以自己定義其他喜歡的符號。

建立儲存過程

delimiter //

create procedure 儲存過程名(輸入輸出型別  引數名  引數型別,輸入輸出型別  引數名  引數型別,...)

begin

sql語句  (儲存過程要完成的操作)

end //

例項1.只帶in(輸入引數)的儲存過程

表示該引數必須在呼叫儲存過程時被指定,在儲存過程中修改該引數的值不能被被返回,為預設值。

drop procedure if exists test;   刪除儲存過程

delimiter //   定義分隔符

create procedure test (in a int)

begin

select username from xx_admin where id=a;

end //

set @a=2;   定義變數

call test(@a);  呼叫儲存過程

2.只帶out(輸出引數)的儲存過程;

該值可在儲存過程內部被改變,並可返回。

drop procedure if exists test;

delimiter //

create procedure test (out a varchar(20))

begin

select username into a from xx_admin where id=2;

end //

delimiter ;

call test(@a);

select @a as '名字';

3.只帶inout(出入輸出引數)的儲存過程;

drop procedure if exists test;

delimiter //

create procedure test (inout a int)

begin

select count(*) into a from xx_admin where id=a;

end //

delimiter ;

set @a=2;

call test(@a);

select @a as '數量';

總結in、out區別:

in:表示輸入乙個值,你需要乙個值,我給你乙個值

out:你往外輸出乙個值,你輸出的那個值我就拿乙個變數來接收你給我輸出的那個值

inout:既能輸入乙個值又能傳出來乙個值

Mysq 儲存過程

drop procedure if exists xl 建立儲存過程 delimiter 轉譯字元 使用 代替 create procedure xl begin select from fd car report end delimiter 轉譯字元 使用 代替 call xl 呼叫儲存過程 de...

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...