程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql存儲進程進修筆記--樹立簡略的存儲進程

Mysql存儲進程進修筆記--樹立簡略的存儲進程

編輯:MySQL綜合教程

Mysql存儲進程進修筆記--樹立簡略的存儲進程。本站提示廣大學習愛好者:(Mysql存儲進程進修筆記--樹立簡略的存儲進程)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql存儲進程進修筆記--樹立簡略的存儲進程正文


1、存儲進程

  存儲進程(Stored Procedure)是在年夜型數據庫體系中,一組為了完成特定功效的SQL語句集,經編譯後存儲在數據庫中,用戶
經由過程指定存儲進程的名字並給出參數(假如該存儲進程帶有參數)來履行它。而我們經常使用的操作數據庫說話SQL語句在履行的時
候須要要先編譯,然後履行,所以履行的效力沒有存儲進程高。

  存儲進程長處以下:

反復應用。存儲進程可以反復應用,從而可以削減數據庫開辟人員的任務量。進步機能。存儲進程在創立的時刻在停止了編譯,未來應用的時刻不再從新翻譯。普通的SQL語句每履行一次就須要編譯一次,所以應用存儲進程進步了效力。削減收集流量。存儲進程位於辦事器上,挪用的時刻只須要傳遞存儲進程的稱號和參數便可以了,是以下降了收集傳輸的數據量。平安性。參數化的存儲進程可以避免SQL注入式進擊,並且可以將Grant、Deny和Revoke權限運用於存儲進程。

  存儲進程簡略語法:

CREATE PROCEDURE 存儲進程稱號(
  輸出輸入類型 變量稱號 類型,

    輸出輸入類型 變量稱號 類型

)
BEGIN
  -- 聲明, 語句要完成的操作,增刪改查。。。
END

2、實例

  例子中的存儲進程均應用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);

 挪用成果以下:

  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 '總數';

 挪用成果以下:

 

  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 '年紀';

 挪用成果以下:

  

  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;

  挪用成果以下:

 

  5、 關於輸出輸入參數

IN為輸出, 界說參數時,可以不加,不加則默許為輸出參數。OUT為輸入,界說參數時,必需加上。INOUT為輸出和輸入,必需加上。表現該參數可以輸出也可在處置後寄存成果停止輸入。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved