真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL存儲(chǔ)過(guò)程

博文大綱:

創(chuàng)新互聯(lián)專注于肇州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供肇州營(yíng)銷型網(wǎng)站建設(shè),肇州網(wǎng)站制作、肇州網(wǎng)頁(yè)設(shè)計(jì)、肇州網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造肇州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供肇州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

  • 1、什么是存儲(chǔ)過(guò)程?
  • 2、存儲(chǔ)過(guò)程有哪些優(yōu)點(diǎn)?
  • 3、自定義存儲(chǔ)過(guò)程舉例
  • 4、while循環(huán)的存儲(chǔ)過(guò)程
  • 5、帶有if判斷的存儲(chǔ)過(guò)程
  • 6、帶有case的存儲(chǔ)過(guò)程
  • 7、將存儲(chǔ)過(guò)程傳出到全局環(huán)境變量
  • 8、其他關(guān)于存儲(chǔ)過(guò)程的操作語(yǔ)句
  • 9、附加:如何復(fù)制表。

前言

存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)存儲(chǔ)的一個(gè)重要的功能,MySQL在5.0以前的版本不支持存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程可以在大大提高數(shù)據(jù)庫(kù)處理速度的同時(shí)提高數(shù)據(jù)庫(kù)編程的靈活性。

1、什么是存儲(chǔ)過(guò)程?

存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集合。使用存儲(chǔ)過(guò)程的目的是將常用或復(fù)雜的工作預(yù)先用SQL語(yǔ)句寫(xiě)好并用一個(gè)指定名稱存儲(chǔ)起來(lái),這個(gè)過(guò)程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,因此成為存儲(chǔ)過(guò)程。當(dāng)以后需要數(shù)據(jù)庫(kù)提供與定義好的存儲(chǔ)過(guò)程的功能相同的服務(wù)時(shí),只需要調(diào)用“CALL 存儲(chǔ)過(guò)程名字”即可自動(dòng)完成。

一個(gè)存儲(chǔ)過(guò)程是一個(gè)可編程的函數(shù),它在數(shù)據(jù)庫(kù)中創(chuàng)建并保存,一般由 SQL 語(yǔ)句和一些特殊的控制結(jié)構(gòu)組成。
當(dāng)希望在不同的應(yīng)用程序或平臺(tái)上執(zhí)行相同的特定功能時(shí),存儲(chǔ)過(guò)程尤為合適。

2、存儲(chǔ)過(guò)程有哪些優(yōu)點(diǎn)?

  • 封裝性:存儲(chǔ)過(guò)程被創(chuàng)建后,可以在程序中被多次調(diào)用,而不必重新編寫(xiě)該存儲(chǔ)過(guò)程的 SQL 語(yǔ)句,并且DBA可以隨時(shí)對(duì)存儲(chǔ)過(guò)程進(jìn)行修改,而不會(huì)影響到調(diào)用它的應(yīng)用程序源代碼。
  • 可增強(qiáng):SQL 語(yǔ)句的功能和靈活性 存儲(chǔ)過(guò)程可以用流程控制語(yǔ)句編寫(xiě),有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。
  • 可減少網(wǎng)絡(luò)流量:由于存儲(chǔ)過(guò)程是在服務(wù)器端運(yùn)行的,且執(zhí)行速度快,因此當(dāng)客戶計(jì)算機(jī)上調(diào)用該存儲(chǔ)過(guò)程時(shí),網(wǎng)絡(luò)中傳送的只是該調(diào)用語(yǔ)句,從而可降低網(wǎng)絡(luò)負(fù)載。
  • 高性能:存儲(chǔ)過(guò)程執(zhí)行一次后,產(chǎn)生的二進(jìn)制代碼就駐留在緩沖區(qū),在以后的調(diào)用中,只需要從緩沖區(qū)中執(zhí)行二進(jìn)制代碼即可,從而提高了系統(tǒng)的效率和性能。
  • 提高數(shù)據(jù)庫(kù)的安全性和數(shù)據(jù)的完整性:使用存儲(chǔ)過(guò)程可以完成所有數(shù)據(jù)庫(kù)操作,并且可以通過(guò)編程的方式控制數(shù)據(jù)庫(kù)信息訪問(wèn)的權(quán)限。

3、自定義存儲(chǔ)過(guò)程舉例

mysql> select * from t1;            
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
mysql> delimiter //               
mysql> create procedure test()            
    -> begin
    -> select * from t1;              
    -> end//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;              
mysql> call test();               
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
16 rows in set (0.00 sec)

通過(guò)上面的例子可以看出,存儲(chǔ)過(guò)程是類似于一個(gè)shell腳本的,存放的是一些sql語(yǔ)句的集合,當(dāng)然,它同樣有一些判斷、循環(huán)等語(yǔ)句,如下。

4、while循環(huán)的存儲(chǔ)過(guò)程

下面的例子是存儲(chǔ)過(guò)程借助while循環(huán)來(lái)計(jì)算1+2+3...+100的結(jié)果是多少。

mysql> delimiter //                
mysql> create procedure test1()        
    -> begin                     
    -> declare n int;                  
    -> declare summary int;             
    -> set n=0;                   
    -> set summary=0;        
    -> while n<=100                  
    -> do
    -> set summary=summary+n;           
    -> set n=n+1;                         
    -> end while;                     
    -> select summary;           
    -> end //                         
mysql> delimiter ;                
mysql> call test1();                
+---------+
| summary |
+---------+
|    5050 |
+---------+
1 row in set (0.00 sec)

5、帶有if判斷的存儲(chǔ)過(guò)程

以下實(shí)現(xiàn)的是如果傳參的值大于或等于10,則執(zhí)行else下面的SQL語(yǔ)句,如果傳參的值小于10,則執(zhí)行then下面的SQL語(yǔ)句。

mysql> delimiter //  

mysql> create procedure test3(in num int)
    -> begin
    -> if num < 10 then
    -> select * from t1 where f_price<10;
    -> else
    -> select * from t1 where f_price>=10;
    -> end if;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call test3(9);        
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| a1   |  101 | apple   |    5.20 |
| a2   |  103 | apricot |    2.20 |
| b2   |  104 | berry   |    7.60 |
| b5   |  107 | xxxx    |    3.60 |
| bs2  |  105 | melon   |    8.20 |
| c0   |  101 | cherry  |    3.20 |
| l2   |  104 | lemon   |    6.40 |
| m2   |  105 | xbabay  |    2.60 |
| o2   |  103 | coconut |    9.20 |
| t2   |  102 | grape   |    5.30 |
| t4   |  107 | xbababa |    3.60 |
+------+------+---------+---------+
11 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> call test3(10);                   
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry |   10.20 |
| bs1  |  102 | orange     |   11.20 |
| m1   |  106 | mango      |   15.70 |
| m3   |  105 | xxtt       |   11.60 |
| t1   |  102 | banana     |   10.30 |
+------+------+------------+---------+
5 rows in set (0.00 sec)

6、帶有case的存儲(chǔ)過(guò)程

該存儲(chǔ)過(guò)程實(shí)現(xiàn)結(jié)果為:當(dāng)傳入的值為偶數(shù)時(shí),輸出t1表中s_id列為偶數(shù)的行,如果傳入的值為奇數(shù),輸出s_id列為奇數(shù)的行,否則輸出空。

mysql> delimiter //
mysql> create procedure test4(in num int)
    -> begin
    -> case num%2
    -> when 0 then
    -> select * from t1 where s_id%2=0;
    -> when 1 then
    -> select * from t1 where s_id%2=1;
    -> else
    -> select null;
    -> end case;
    -> end
    -> //
mysql> delimiter ;
mysql> call test4(4);             
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b2   |  104 | berry  |    7.60 |
| bs1  |  102 | orange |   11.20 |
| l2   |  104 | lemon  |    6.40 |
| m1   |  106 | mango  |   15.70 |
| t1   |  102 | banana |   10.30 |
| t2   |  102 | grape  |    5.30 |
+------+------+--------+---------+
6 rows in set (0.00 sec)
mysql> call test4(3);         
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b5   |  107 | xxxx       |    3.60 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+

7、將存儲(chǔ)過(guò)程傳出到全局環(huán)境變量

mysql> delimiter //
mysql> create procedure test6(out num float)
    -> begin
    -> select max(f_price) into num from t1;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call test6(@num);
Query OK, 1 row affected (0.00 sec)

mysql> select @num;             
+--------------------+
| @num               |
+--------------------+
| 15.699999809265137 |
+--------------------+
1 row in set (0.00 sec)

8、其他關(guān)于存儲(chǔ)過(guò)程的操作語(yǔ)句

mysql> help procedure;                  
topics:
   ALTER PROCEDURE          
   CREATE PROCEDURE        
   DROP PROCEDURE               
   PROCEDURE ANALYSE         
   SELECT
   SHOW
   SHOW CREATE PROCEDURE  存儲(chǔ)過(guò)程名    

9、附加:如何復(fù)制表。

方法1:like方法能一模一樣的將一個(gè)表的結(jié)果復(fù)制生成一個(gè)新表,包括復(fù)制表的備注、索引、主鍵外鍵、存儲(chǔ)引擎等。但是不包括表數(shù)據(jù),如下:

mysql> create table new_t1 like t1;
Query OK, 0 rows affected (0.00 sec)

mysql> desc new_t1;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| f_id    | char(10)     | NO   |     | NULL    |       |
| s_id    | int(11)      | NO   |     | NULL    |       |
| f_name  | char(255)    | NO   |     | NULL    |       |
| f_price | decimal(8,2) | NO   |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

方法2:select的方法值復(fù)制字段屬性,其它的主鍵、索引、表備注、存儲(chǔ)引擎都沒(méi)有復(fù)制。如下:

mysql> create table new_t1_2 select * from t1;
Query OK, 16 rows affected (0.01 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> select * from new_t1_2;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
16 rows in set (0.00 sec)

———————— 本文至此結(jié)束,感謝閱讀 ————————


分享標(biāo)題:MySQL存儲(chǔ)過(guò)程
瀏覽地址:http://weahome.cn/article/pdscdc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部