亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么執行MySQL的存儲過程

發布時間:2020-05-27 10:52:09 來源:網絡 閱讀:2469 作者:三月 欄目:系統運維

下文我給大家簡單講講關于怎么執行MySQL的存儲過程,大家之前了解過相關類似主題內容嗎?感興趣的話就一起來看看這篇文章吧,相信看完怎么執行MySQL的存儲過程對大家多少有點幫助吧。

一、存儲過程

存儲過程是在大型數據庫系統中一組為了完成特定功能的SQL語句集,存儲在數據庫中。存儲過程經過第一次編譯后,再次調用不需要編譯,用戶可以通過指定的存儲過程名和給出一些存儲過程定義的參數來使用它。存儲過程就是為以后使用而保存的一條或多條SQL語句,個人理解跟函數類似,一般用的較少。

好處:

  1. 通過把處理封裝在一個易用的單元中,可以簡化復雜的操作。
    2.不需要反復建立一系列的處理步驟,因而保證了數據的一致性。
    3.簡化了對變動的管理,這一點的延伸就是安全性。
    4.存儲過程通常以編譯過的形式存儲,所以DBMS處理命令所需的工作量少,提高了性能。

 缺點:

1.可移植性差
2.對于簡單的SQL語句,存儲過程沒什么優勢
4.如果只有一個用戶使用數據庫,那么存儲過程對安全也沒什么影響
5.團隊開發時需要先統一標準,否則后期維護成本大
6.在大并發量訪問的情況下,不宜寫過多涉及運算的存儲過程
7.業務邏輯復雜時,特別是涉及到對很大的表進行操作的時候,不如在前端先簡化業務邏輯

二、存儲過程語法格式

一般形式

create procedure [過程名]([in|out|inout] [參數名] [參數類型],...)
begin
    [SQL語句集;]
end

在定義參數部分時in表示傳入參數,讀取外部變量值賦給內部參數,但內部參數的作用域僅限存儲過程;out表示傳出參數,將內部參數傳遞到外部變量;inout既有in的功能,又用out的功能,屬于in與out的結合體。在都不寫的情況下,默認使用in選項
但是,由于SQL語句集部分一樣使用的是分號(;)作為分隔符,所以要在創建存儲過程前使用delimiter重新定義分隔符,并在創建完成后將分隔符還原。delimiter [新分隔符]

完整格式

delimiter [新分隔符]
create procedure [過程名]([in|out|inout] [參數名] [參數類型],...)
begin
    SQL語句集;         
end[新分隔符]
delimiter;

三、存儲過程創建舉例說明:

1.創建單條SQL存儲過程select_id(),(沒什么實際意義,僅僅舉例)

delimiter //
create procedure select_id(inout id_inout int)
begin
    select user_id from user where user_id=id_inout;        
end//
delimiter;
##創建存儲過程select_id()

2.創建好存儲過程select_id()后,會保存在數據庫中。如果創同名的存儲過程會報錯,若要創建相同名稱的存儲過程,需要刪除后方可創建。

PROCEDURE select_id already exists
  1. 創建多條SQL存儲過程select_ids()
delimiter $$
create procedure select_ids()
begin
    select user_id from user;       
        select customer_id from user;       
end$$
delimiter;

四、調用存儲過程

調用存儲過程很簡單,call [過程名](@[外部參數名],.

調用select_id()

set@user_id=62356;
call select_id(@user_id);
或者
call select_id(62356)

調用select_ids()

call select_ids();

 五、查看存儲過程

1.查看存儲過程具體內容

show create procedure test.select_id;

2.查看存儲過程狀態

show PROCEDURE status;

     六、刪除存儲過程

drop procedure [過程名];

drop procedure test.select_id;

 七、SQL語句集延伸說明

1)定義存儲過程的內部變量

  定義變量語句:declare [變量名,...] [變量類型] [default 默認值];

  賦值語句:set [變量名]=[表達式];

  可以一次定義多個同類型的變量,并且設置初始值。

2)多層嵌套

mysql> delimiter //
mysql> create procedure select3()
    -> begin
    -> declare name varchar(20) default '學生';
    -> select name;
    -> begin
    -> declare name varchar(20) default '老師';
    -> select name;
    -> end;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

3)條件語句

if語句

if [判斷語句] then
[執行內容]
end if;

if [判斷語句] then
[執行內容]
else
[執行內容]
end if;

case語句

case [變量名]
when [值] then
[執行內容]
when [值] then
[執行內容]
...
else
[執行內容]
end case;

循環語句

while語句,先判斷后運行

while [判斷語句] do
[執行內容]
end while
mysql> create procedure `while`(in num int)
    -> begin
    -> declare var int;
    -> set var=0;
    -> while var<num do
    -> set var=var+1;
    -> end while;
    -> select var;
    -> end //

repeat語句,先運行后判斷

repeat
[執行內容]
until [判斷語句]
end repeat;
mysql> create procedure `repeat`(in num int)
    -> begin
    -> declare var int;
    -> set var=0;
    -> repeat
    -> set var=var+2;
    -> until var>num
    -> end repeat;
    -> select var;
    -> end //

loop語句,運行直到遇到leave

[標簽名]:loop
[執行內容]
leave [標簽名]
[執行內容]
end loop;
mysql> create procedure `loop`(in num int)
    -> begin
    -> declare var int;
    -> set var=0;
    -> label1:loop
    -> set var=var+2;
    -> if var>num then
    -> leave label1;
    -> end if;
    -> end loop;
    -> select var;

   -> end //

大家覺得怎么執行MySQL的存儲過程這篇文章怎么樣,是否有所收獲。如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保亭| 澳门| 定南县| 基隆市| 四川省| 康定县| 布尔津县| 宿迁市| 辉县市| 北海市| 翁牛特旗| 海林市| 罗源县| 哈尔滨市| 青州市| 德州市| 准格尔旗| 霸州市| 德令哈市| 时尚| 信宜市| 荣昌县| 西乌珠穆沁旗| 乌拉特前旗| 房产| 日照市| 囊谦县| 正定县| 长岛县| 广州市| 邢台县| 吉林省| 义乌市| 武夷山市| 洛阳市| 奉化市| 扎鲁特旗| 哈密市| 东方市| 嫩江县| 新平|