国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql存儲過程學習筆記--建立簡單的存儲過程

2024-07-24 13:06:10
字體:
來源:轉載
供稿:網友
我們常用的操作數據庫語言SQL語句在執行的時候需要要先編譯,然后執行,而存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給定參數(如果該存儲過程帶有參數)來調用執行它。
 
 

一、存儲過程

  存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶 
通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。而我們常用的操作數據庫語言SQL語句在執行的時
候需要要先編譯,然后執行,所以執行的效率沒有存儲過程高。

  存儲過程優點如下:

重復使用。存儲過程可以重復使用,從而可以減少數據庫開發人員的工作量。提高性能。存儲過程在創建的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執行一次就需要編譯一次,所以使用存儲過程提高了效率。減少網絡流量。存儲過程位于服務器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網絡傳輸的數據量。安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權限應用于存儲過程。

  存儲過程簡單語法:

CREATE PROCEDURE 存儲過程名稱(  輸入輸出類型 變量名稱 類型,    輸入輸出類型 變量名稱 類型)BEGIN  -- 聲明, 語句要完成的操作,增刪改查。。。END

二、實例

  例子中的存儲過程均使用mysql作為例子。
  表結構如下:

DROP TABLE IF EXISTS `person`;CREATE TABLE `person` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(255) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `password` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

  1、只帶IN(輸入參數)的存儲過程

   表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值.

DROP PROCEDURE IF EXISTS proc_person_findById;
-- 創建存儲過程CREATE PROCEDURE proc_person_findById(    in n int)BEGIN     SELECT * FROM person where id=n;END
-- 定義變量SET @n=2;-- 調用存儲過程CALL proc_person_findById(@n);

 調用結果如下:

Mysql存儲過程學習筆記--建立簡單的存儲過程

  2、只帶OUT(輸出參數)的存儲過程

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

DROP PROCEDURE IF EXISTS proc_person_getCount
-- 創建存儲過程CREATE PROCEDURE proc_person_getCount(    out n int(11))BEGIN      SELECT COUNT(*) INTO n FROM person ;END 
-- 調用存儲過程CALL proc_person_getCount(@n);SELECT @n as '總數';

 調用結果如下:

 Mysql存儲過程學習筆記--建立簡單的存儲過程

  3、帶IN(輸入參數)和OUT(輸出參數)的

  調用時指定,并且可被改變和返回

DROP PROCEDURE IF EXISTS proc_person_findInfoById; 
-- 創建存儲過程CREATE PROCEDURE proc_person_findInfoById(    IN n INT(11),     OUT pusername VARCHAR(255),     OUT page INT(11))BEGIN      SELECT username, age INTO pusername, page FROM person WHERE id=n;END
-- 定義變量SET @id=2;-- 調用存儲過程CALL proc_person_findInfoById(@id,@username, @age);SELECT @username as '用戶名', @age '年齡';

 調用結果如下:

Mysql存儲過程學習筆記--建立簡單的存儲過程  

  4、帶INOUT(輸入輸出)參數的存儲過程

-- 輸入輸出DROP PROCEDURE IF EXISTS proc_person_get_age;-- 創建存儲過程CREATE PROCEDURE proc_person_get_age(  INOUT n INT(11))BEGIN   SELECT age INTO N FROM person WHERE id=n;ENDSET @id = 1;CALL proc_person_get_age(@id); SELECT @id;

  調用結果如下:

 Mysql存儲過程學習筆記--建立簡單的存儲過程

  5、 關于輸入輸出參數

IN為輸入, 定義參數時,可以不加,不加則默認為輸入參數。OUT為輸出,定義參數時,必須加上。INOUT為輸入和輸出,必須加上。表示該參數可以輸入也可在處理后存放結果進行輸出。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桓台县| 清新县| 顺义区| 宁陵县| 盐津县| 方正县| 梅河口市| 鹰潭市| 日喀则市| 全南县| 闻喜县| 惠州市| 九江市| 景洪市| 吴江市| 新昌县| 扬州市| 建德市| 崇信县| 仪陇县| 长治县| 福贡县| 杨浦区| 海淀区| 兴义市| 绥滨县| 永安市| 三亚市| 新宁县| 错那县| 湟源县| 江口县| 宣汉县| 孝昌县| 平舆县| 黄陵县| 交城县| 达孜县| 天柱县| 天柱县| 水城县|