多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 數(shù)據(jù)庫 > 數(shù)據(jù)庫應(yīng)用 > MySQL存儲過程

MySQL存儲過程

來源:程序員人生   發(fā)布時間:2016-09-19 10:27:50 閱讀次數(shù):3779次

MySQL存儲進(jìn)程

存儲進(jìn)程是SQL語句和控制語句的預(yù)編譯集合,以1個名稱存儲并作為1個單元處理。

1、MySQL履行流程,通過存儲進(jìn)程,可以免重復(fù)語法分和編譯,提高履行效力

2、存儲進(jìn)程:

  • (1)是SQL語句與控制語句的【預(yù)編譯集合】,以【1個名稱存儲】作為【1個單元處理】

  • (2)優(yōu)點(diǎn):
    · 增強(qiáng)了語句的功能和靈活性:可以通過控制語句對流程進(jìn)行控制和判斷
    · 實(shí)現(xiàn)較快的履行速度,只在【第1次調(diào)用時進(jìn)行語法分析和編譯】 ,以后直接從內(nèi)存中得到結(jié)果
    · 減少網(wǎng)絡(luò)流量

這里寫圖片描述
自定義存儲進(jìn)程

1、存儲進(jìn)程語法結(jié)構(gòu)分析

CREATE [DEFINER = {user|CURRENT_USER}] PROCEDURE sp_name ([proc_parameter[,...]]) //可以帶0到多個參數(shù) [characteristic ...] routine_body

其中參數(shù)

proc_parameter: [IN | OUT | INOUT] param_name type
  • IN, 表示該參數(shù)的值必須在調(diào)用存儲進(jìn)程時指定
  • OUT, 表示該參數(shù)的值可以被存儲進(jìn)程改變,并且可以返回
  • INOUT, 表示該參數(shù)的值調(diào)用時指定,并且可以被改變和返回

2.特性

COMMENT 'string' | {CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA|SQL SECURITY{DEFINER|INVOKER}
  • COMMENT:注釋
  • CONTAINS SQL:包括SQL語句, 但不包括讀或?qū)憯?shù)據(jù)的語句
  • NO SQL:不包括SQL語句
  • READS SQL DATA:包括讀數(shù)據(jù)的語句
  • MODIFIES SQL DATA:包括寫數(shù)據(jù)的語句
  • SQL SECURITY {DEFINER|INVOKER}指明誰有權(quán)限來履行

3.進(jìn)程體

  • (1)進(jìn)程體由合法的SQL語句構(gòu)成;
  • (2)進(jìn)程體可以是任意SQL語句;
  • (3)進(jìn)程體如果為復(fù)合結(jié)構(gòu)則使用BEGIN…END語句
  • (4)復(fù)合結(jié)構(gòu)可使用條件、循環(huán)等控制語句

創(chuàng)建不帶參數(shù)的存儲進(jìn)程:

語法格式:CREATE PROCEDURE 存儲進(jìn)程名 ([參數(shù)],[參數(shù)]...)

例如:CREATE PROCEDURE sq1() SELECT VERSION();

調(diào)用存儲進(jìn)程

CALL 存儲進(jìn)程名[(參數(shù))],...

例如:CALL sp1();無參可以省略小括號,有參就不能省略

1.創(chuàng)建沒有參數(shù)的存儲進(jìn)程

CREATE PROCEDURE sp1() SELECT VERSION();

2.調(diào)用存儲進(jìn)程

CALL sp_name([parameter[,...]]) - 帶參數(shù)的存儲進(jìn)程的調(diào)用 CALL sp_name[()] - 不帶參數(shù)的存儲進(jìn)程調(diào)用 CALL sp1; CALL sp1();

2.創(chuàng)建帶有IN類型參數(shù)的存儲進(jìn)程

創(chuàng)建實(shí)例代碼(參數(shù)名不能和表中的字段名相同) 1、修改定界符:DELIMITER new_limiter,1般用'//'代替';'作為定界符 2、通過傳入id刪除字段 CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED) BEGIN DELETE FROM users WHERE id = p_id(傳入的p_id); //【變量名稱不能與字段相同,系統(tǒng)沒法辨認(rèn) END // DELIMITER ; 3、調(diào)用:CALL removeUserById(3); //刪除id=3的記錄 修改存儲進(jìn)程 ALTER PROCEDURE sp_name [characteristic] COMMENT 'string' |{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA} |SQL SECURITY{DEFINER|INVOKER} 3.刪除存儲進(jìn)程 DROP PROCEDURE [IF EXISTS] sp_name;

3. 創(chuàng)建帶有IN OUT類型參數(shù)的存儲進(jìn)程,根據(jù)id刪除用戶,并返回剩余用戶數(shù);

DELIMITER // CREATE PROCEDURE removerUserAndReturnUserName(IN showID INT UNSIGNED,OUT numUsers INT UNSIGNED) BEGIN DELETE FROM user WHERE id = showID; SELECT count(ID) FROM user INTO numUsers; END // SELECT count(ID) FROM user INTO numUsers; /** 該語句中的 INTO 含義就是將 SELECT 語句結(jié)果的表達(dá)式返回到 numUsers 變量中 */ CALL removerUserAndReturnUserName(10,@nums); /** @nums 所代表的就是用戶變量,可用 SELECT @nums 輸出 */

用 DECLARE 聲明的變量是局部變量,局部變量只能存在于 BEGIN…END 之間,且聲明時必須置于 BEGIN…END 的第1行

而通過 SELECT…INTO…/SET @id = 07 這類方法設(shè)置的變量我們稱之為用戶變量,只能存在于當(dāng)前用戶所使用的客戶端有效。

CALL rmUserAndRtUserNums(27, @nums); SELECT @nums; //@nums - 就是用戶變量 DECLARE聲明的變量都是在BEGINEND之間,是局部變量 SET @i = 7; //通過@或SET設(shè)置的變量稱為用戶變量

4.創(chuàng)建1帶多個OUT類型參數(shù)的存儲進(jìn)程

1、例子:IN通過年齡刪除數(shù)據(jù)行,OUT返回被刪除的行數(shù)和剩余行數(shù)

2、介紹1個系統(tǒng)函數(shù)ROW_COUNT(),無參,返回上1次CRUD操作影響的行數(shù)

DELIMITER // CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT delNums SMALLINT UNSIGNED, OUT leftNums SMALLINT UNSIGNED) BEGIN DELETE FROM users WHERE WHERE age = p_age; //注意變量不同 SELECT ROW_COUNT() INTO delNums; SELECT COUNT(id) FROM users INTO leftNums; END // DELIMITER ; SELECT * FROM users; SELECT COUNT(id) FROM users WHERE age = 20; CALL rmUserByAgeAndRtInfos(20, @a, @b); SELECT * FROM users; SELECT COUNT(id) FROM users WHERE age = 23; CALL rmUserByAgeAndRtInfos(23, @a, @b); SELECT @a, @b;

5.存儲進(jìn)程與自定義函數(shù)的區(qū)分

  • A、存儲進(jìn)程實(shí)現(xiàn)的功能相對復(fù)雜,函數(shù)針對性較強(qiáng)
  • B、存儲進(jìn)程可以返回多個值,函數(shù)只能有1個返回值
  • C、存儲進(jìn)程1般獨(dú)立履行,函數(shù)可以作為 sql 語句的組成部份來出現(xiàn)
    存儲進(jìn)程和自定義函數(shù)的區(qū)分

(1)
存儲進(jìn)程實(shí)現(xiàn)的功能較復(fù)雜,常常針對表做操作;
函數(shù)針對性比較強(qiáng),很少用于對表做操作;

(2)
存儲進(jìn)程可以有多個返回值;
而函數(shù)只能有1個返回值;

(3)
存儲進(jìn)程1般獨(dú)立履行;
函數(shù)可以作為其他SQL語句的組成部份出現(xiàn)。

6.總結(jié):
存儲進(jìn)程:是SQl語句與控制語句的預(yù)編譯集合,以1個名稱存儲并作為1個單元處理
參數(shù):輸入類型,輸出類型,輸入&&輸出
創(chuàng)建:creat.....procedure....
存儲進(jìn)程(call procedure proc_name[(123,@name,@num...)])
自定義函數(shù)(select func_name(a,b...)
注意:

  • A、需要修改分隔符(delimiter //)
  • B、復(fù)合結(jié)構(gòu)包括在 begin … end 語句塊中
  • C、復(fù)合結(jié)構(gòu)中的 sql 語句以 分號 結(jié)束

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美videos日本hd | 精品自拍视频在线观看 | 国产手机在线αⅴ片无码观看 | 劲爆欧美第一页 | 日本一级毛片视频无遮挡免费 | 18欧美同性videos可播放 | 欧美国产综合在线 | 日本aaaa级毛片在线看 | 日本免费在线一区 | 天堂在线www网亚洲 天堂在线xw | 亚洲久久色| 欧美1069 | 国产亚洲精 | 国产精品视频国产永久视频 | 男女男精品视频站 | 大学生一级一片第一次免费 | 国产精品日韩欧美久久综合 | 欧美黑人粗暴另类多交 | 国产精品夜色视频一级区 | 精品国产一区二区三区香蕉沈先生 | 日韩一级片免费在线观看 | 最新国产福利片在线观看 | 日韩成人免费aa在线看 | 国产成人精品福利网站人 | 18videosex性加拿大| 2017琪琪理论影院 | 3344成年站福利在线视频免费 | 91午夜精品亚洲一区二区三区 | 国产精品亚洲午夜一区二区三区 | 午夜亚洲国产理论秋霞 | 精品视频一区二区三区四区 | 国产精品人成人免费国产 | 精品国产日韩一区三区 | 日韩亚洲欧美性感视频影片免费看 | 色老头一区二区三区 | 视频一区二区在线 | 宇都宫紫苑(rion)在线播放 | jizzjizzjizz中国| 午夜久久久久久网站 | 久久国产精品永久免费网站 | 91久久亚洲精品一区二区 |