成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL基礎教程之存儲過程

數據庫 MySQL
存儲過程簡單來說,就是為以后的使用而保存的一條或多條MySQL語句的集合。可將其視為批件,雖然它們的作用不僅限于批處理。在我看來, 存儲過程就是有業務邏輯和流程的集合, 可以在存儲過程中創建表,更新數據, 刪除等等。

存儲過程

存儲過程簡單來說,就是為以后的使用而保存的一條或多條MySQL語句的集合。可將其視為批件,雖然它們的作用不僅限于批處理。

在我看來, 存儲過程就是有業務邏輯和流程的集合, 可以在存儲過程中創建表,更新數據, 刪除等等。

為什么要使用存儲過程

  1. 通過把處理封裝在容易使用的單元中,簡化復雜的操作(正如前面例子所述)。
  2. 由于不要求反復建立一系列處理步驟,這保證了數據的完整性。如果所有開發人員和應用程序都使用同一(試驗和測試)存儲過程,則所使用的代碼都是相同的。這一點的延伸就是防止錯誤。需要執行的步驟越多,出錯的可能性就越大。防止錯誤保證了數據的一致性。
  3. 簡化對變動的管理。如果表名、列名或業務邏輯(或別的內容)有變化,只需要更改存儲過程的代碼。使用它的人員甚至不需要知道這些變化。

一個簡單的存儲過程

  1. create procedure porcedureName () 
  2. begin 
  3.     select name from user
  4. end 

存儲過程用create procedure 創建, 業務邏輯和sql寫在begin和end之間。mysql中可用call porcedureName ();來調用過程。

  1. -- 調用過程 
  2. call porcedureName ();  

該存儲過程沒有參數, 只是在調用的時候查詢了用戶表的用戶名而已, 調用結果如下

name
admin
admin1
admin2
admin3

刪除存儲過程

  1. DROP PROCEDURE IF EXISTS porcedureName; -- 沒有括號() 

使用參數的存儲過程

  1. create procedure procedureName( 
  2.     out min decimal(8,2), 
  3.     out avg decimal(8,2), 
  4.     out max decimal(8,2) 
  5. BEGIN 
  6.     select MIN(price) INTO min from order
  7.     select AVG(price) into avg from order
  8.     select MAX(price) into max from order
  9. END 

此過程接受三個參數, 分別用于獲取訂單表的最小、平均、最大價格。每個參數必須具有指定的類

型,這里使用十進制值(decimal(8,2)), 關鍵字OUT指出相應的參數用來從存儲過程傳出

一個值(返回給調用者)

MySQL支持IN(傳遞給存儲過程)、OUT(從存儲過程傳出,如這里所用)和INOUT(對存儲過程傳入和傳出)類型的參數。存儲過程的代碼位于BEGIN和END語句內,如前所見,它們是一系列SELECT語句,用來檢索值,然后保存到相應的變量(通過指定INTO關鍵字)

為調用此修改過的存儲過程,必須指定3個變量名,如下所示:(所有MySQL變量都必須以@開始。)

  1. -- 由于過程指定三個參數, 故調用必須要參數匹配 
  2. call procedureName(@min, @avg, @max);  

該調用并沒有任何輸出, 只是把調用的結果賦給了調用時傳入的變量(@min, @avg, @max)。然后即可調用顯示該變量的值。

  1. select @min, @avg, @max

結果如下

@min @avg @max
42.00 601.00 2222.00

使用in參數, 輸入一個用戶id, 返回該用戶所有訂單的總價格。

  1. create procedure getTotalById ( 
  2.     in userId int
  3.     out total decimal(8,2) 
  4. BEGIN 
  5.     select SUM(r.price) from order r 
  6.     where r.u_id = userId 
  7.     into total; 
  8. END 

調用存儲過程

  1. call getTotalById(1, @total); 
  2. select @total;  

結果將返回該用戶所有訂單的合計價格。

復雜一點的過程, 根據用戶id獲取該用戶的所有訂單價格, 并動態的選擇是否加稅。代碼設計如下

  1. create procedure getTotalByUser2( 
  2.     in userId int
  3.     in falg boolean, -- 是否加稅標記 
  4.     out total decimal(8,2) 
  5. begin 
  6.     DECLARE tmptotal DECIMAL(8,2); 
  7.     DECLARE taxrate int DEFAULT 6;-- 默認的加稅的利率 
  8.      
  9.     select SUM(r.price) from order r 
  10.     where r.u_id = userId 
  11.     into tmptotal; 
  12.      
  13.     if taxable then 
  14.         select tmptotal + (tmptotal/1000*taxrate) into tmptotal; 
  15.     end if; 
  16.      
  17.     select tmptotal into total; 
  18. END 

該過程傳入三個參數, 用戶id, 是否加稅以及返回的總價格,在過程內部, 定義兩個局部變量tmptotal和taxrate,把查詢出來的結果賦給臨時變量, 在判斷是否加稅。最后把局部變量的值賦給輸出參數。 

  1. call getTotalByUser2(1, false, @total); -- 不加稅 
  2. call getTotalByUser2(1, true, @total);  -- 加稅 
  3. select @total; 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2017-07-18 10:14:23

OracleMerge into教程

2010-05-12 17:55:30

MySQL 5.0

2009-07-24 09:20:15

數組實例

2009-06-22 09:23:18

事件監聽器

2011-04-15 09:20:56

ASP.NET MVC

2010-06-13 11:21:32

MySQL 5.0

2009-07-24 10:09:08

ASP.NET個性化ASP.NET基礎教程

2010-06-11 13:53:54

UML建模

2021-07-16 07:21:45

C++可調用對象std::functi

2009-10-21 17:36:36

VB基礎教程

2021-02-06 07:49:48

C語言編程開發技術

2011-07-07 13:58:13

Windows 200活動目錄

2009-10-26 09:04:35

VB.NET數據庫基礎

2017-12-12 07:47:59

dockermarathon服務器

2011-07-18 09:35:29

iPhone 框架

2009-07-22 13:32:43

iBATIS DAO

2010-06-28 09:21:04

SQL Server存

2011-09-13 16:39:50

Android UI設

2011-07-21 10:17:53

java

2022-09-29 07:27:50

DaprKubernetes
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线一区二区国产 | 免费在线观看成人 | 欧洲色综合 | 国产精品欧美一区二区三区不卡 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | a级在线观看 | 国产成人精品一区二区 | 国产精品久久久久久一区二区三区 | 欧美国产精品一区二区 | 91av大全| 国产精品久久久久久久久久久久久 | 日韩视频一区二区 | 精品日韩一区 | 亚洲视频网 | 久久久国产精品视频 | 亚洲精品在| 粉嫩高清一区二区三区 | 国产成人免费 | 午夜免费网站 | www.国产精| 国产亚洲精品一区二区三区 | 日日夜夜精品视频 | 亚洲第一av | 亚洲v日韩v综合v精品v | 亚洲精品成人网 | 91精品国产高清一区二区三区 | 一区二区精品 | 超碰av在线 | 欧美视频免费在线观看 | 黄色一级毛片 | 精品视频一区二区三区四区 | 亚洲视频在线一区 | 欧美视频在线免费 | 国产午夜久久久 | 国产精品久久久久免费 | 亚洲欧美日本在线 | 久草视频观看 | 免费在线观看一区二区三区 | 亚洲一区二区精品视频 | 天堂一区二区三区 | 一级aaaa毛片 |