1. 程式人生 > 實用技巧 >lyt經典版MySQL基礎——儲存過程

lyt經典版MySQL基礎——儲存過程

  1 #儲存過程
  2 /*
  3 儲存過程:類似於java中的方法
  4 好處:
  5 1、提高程式碼的重用性
  6 2、簡化操作
  7 
  8 */
  9 #儲存過程
 10 /*
 11 含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
 12 1、提高程式碼的重用性
 13 2、簡化操作
 14 3、減少了編譯次數並且減少了和資料庫伺服器的連線次數,提高了效率
 15 
 16 */
 17 
 18 #一、建立語法
 19 /*
 20 create procedure 儲存過程名(引數列表)
 21 begin
 22     儲存過程體(一組合法的SQL語句)
 23
end 24 25 注意: 26 1、引數列表包含三部分 27 引數模式 引數名 引數型別 28 舉例: 29 in stuname varchar(20) 30 31 引數模式: 32 in :該引數可以作為輸入,也就是該引數需要呼叫方傳入值 33 out :該引數可以作為輸出,也就是該引數可以作為返回值 34 inout :該引數既可以作為輸入又可以作為輸出,也就是該引數既需要傳入值,又可以返回值 35 36 2、如果儲存過程體僅僅只有一句話,begin end 可以省略 37 儲存過程體中的每條SQL語句的結尾要求必須加分號。 38 儲存過程的結尾可以使用 delimiter 重新設定
39 語法: 40 delimiter 結束標記 41 42 delimiter $ 43 44 45 #二、呼叫語法 46 call 儲存過程名(實參列表); 47 */ 48 49 #1.空參列表 50 #案例:插入到admin表中五條記錄 51 DELIMITER $ 52 CREATE PROCEDURE myp1() 53 BEGIN 54 INSERT INTO admin(username,PASSWORD) VALUES('john1','0000'),('lily','0000'),('lucy','0000'),('lily','0000'),('rose','0000'
),('lily','0000'),('tom','0000'),('lily','0000'); 55 END $ 56 #呼叫 57 CALL myp1()$ 58 59 #2.建立帶in模式引數的儲存過程 60 #案例1:建立儲存過程時間 根據女神名,查詢對應的男神資訊 61 DELIMITER $ 62 CREATE PROCEDURE myp2(IN beautyName VARCHAR(20)) 63 BEGIN 64 SELECT bo.* 65 FROM boys bo RIGHT JOIN beauty b ON bo.id=b.boyfriend_id 66 WHERE b.name=beautyName; 67 END $ 68 #呼叫 69 CALL myp2('柳巖')$ 70 CALL myp2('小昭')$ 71 72 #案例2:建立儲存過程實現,使用者是否登入成功 73 DELIMITER $ 74 CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20)) 75 BEGIN 76 DECLARE result INT DEFAULT 0; #宣告並初始化 77 78 SELECT COUNT(*) INTO result #賦值 79 FROM admin 80 WHERE admin.username=username 81 AND admin.password=PASSWORD; 82 83 SELECT IF(result>0,'成功','失敗'); #使用 84 85 END $ 86 #呼叫 87 CALL myp4('張飛','9999') $ 88 89 #3.建立帶out模式的儲存過程 90 #案例1:根據女神名,返回對應的男神名 91 CREATE PROCEDURE myp5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20)) 92 BEGIN 93 SELECT bo.boyName INTO boyName 94 FROM boys bo INNER JOIN beauty b ON bo.id=b.boyfriend_id 95 WHERE b.name=beautyName; 96 END$ 97 #呼叫 98 CALL myp5('小昭',@bName)$ 99 SELECT @bName$ 100 101 #案例2:根據女神名,返回對應的男神名和男生魅力值 102 DELIMITER $ 103 CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT) 104 BEGIN 105 SELECT bo.boyName,bo.userCP INTO boyName,userCP 106 FROM boys bo INNER JOIN beauty b ON bo.id=b.boyfriend_id 107 WHERE b.name=beautyName; 108 END$ 109 #呼叫 110 CALL myp6('小昭',@bName,@ucp)$ 111 SELECT @bName,@ucp$ 112 113 #4.建立帶inout模式引數的儲存過程 114 #案例1:傳入a和b兩個值,最終a和b都翻倍並返回 115 DELIMITER $ 116 CREATE PROCEDURE myp8(INOUT a INT,INOUT b INT) 117 BEGIN 118 SET a=a*2; 119 SET b=b*2; 120 END$ 121 #呼叫 122 SET @m=10$ 123 SET @n=20$ 124 CALL myp8(@m,@n)$ 125 SELECT @m,@n$ 126 127 DELIMITER; 128 #二、刪除儲存過程 129 #語法:drop procedure 儲存過程名 130 DROP PROCEDURE myp1; 131 DROP PROCEDURE myp2,myp3; #x 132 133 #三、檢視儲存過程的資訊 134 DESC myp2; #x 135 SHOW CREATE PROCEDURE myp2;