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為輸出和輸入,必需加上。表現該參數可以輸出也可在處置後寄存成果停止輸入。