日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > MySQL存儲過程

MySQL存儲過程

來源:程序員人生   發布時間:2016-09-19 10:27:50 閱讀次數:3790次

MySQL存儲進程

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

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

2、存儲進程:

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

  • (2)優點:
    · 增強了語句的功能和靈活性:可以通過控制語句對流程進行控制和判斷
    · 實現較快的履行速度,只在【第1次調用時進行語法分析和編譯】 ,以后直接從內存中得到結果
    · 減少網絡流量

這里寫圖片描述
自定義存儲進程

1、存儲進程語法結構分析

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

其中參數

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

2.特性

COMMENT 'string' | {CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA|SQL SECURITY{DEFINER|INVOKER}
  • COMMENT:注釋
  • CONTAINS SQL:包括SQL語句, 但不包括讀或寫數據的語句
  • NO SQL:不包括SQL語句
  • READS SQL DATA:包括讀數據的語句
  • MODIFIES SQL DATA:包括寫數據的語句
  • SQL SECURITY {DEFINER|INVOKER}指明誰有權限來履行

3.進程體

  • (1)進程體由合法的SQL語句構成;
  • (2)進程體可以是任意SQL語句;
  • (3)進程體如果為復合結構則使用BEGIN…END語句
  • (4)復合結構可使用條件、循環等控制語句

創建不帶參數的存儲進程:

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

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

調用存儲進程

CALL 存儲進程名[(參數)],...

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

1.創建沒有參數的存儲進程

CREATE PROCEDURE sp1() SELECT VERSION();

2.調用存儲進程

CALL sp_name([parameter[,...]]) - 帶參數的存儲進程的調用 CALL sp_name[()] - 不帶參數的存儲進程調用 CALL sp1; CALL sp1();

2.創建帶有IN類型參數的存儲進程

創建實例代碼(參數名不能和表中的字段名相同) 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); //【變量名稱不能與字段相同,系統沒法辨認 END // DELIMITER ; 3、調用:CALL removeUserById(3); //刪除id=3的記錄 修改存儲進程 ALTER PROCEDURE sp_name [characteristic] COMMENT 'string' |{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA} |SQL SECURITY{DEFINER|INVOKER} 3.刪除存儲進程 DROP PROCEDURE [IF EXISTS] sp_name;

3. 創建帶有IN OUT類型參數的存儲進程,根據id刪除用戶,并返回剩余用戶數;

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 語句結果的表達式返回到 numUsers 變量中 */ CALL removerUserAndReturnUserName(10,@nums); /** @nums 所代表的就是用戶變量,可用 SELECT @nums 輸出 */

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

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

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

4.創建1帶多個OUT類型參數的存儲進程

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

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

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.存儲進程與自定義函數的區分

  • A、存儲進程實現的功能相對復雜,函數針對性較強
  • B、存儲進程可以返回多個值,函數只能有1個返回值
  • C、存儲進程1般獨立履行,函數可以作為 sql 語句的組成部份來出現
    存儲進程和自定義函數的區分

(1)
存儲進程實現的功能較復雜,常常針對表做操作;
函數針對性比較強,很少用于對表做操作;

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

(3)
存儲進程1般獨立履行;
函數可以作為其他SQL語句的組成部份出現。

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

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久国产a级 亚洲天堂偷拍 | 免费啪啪 | 国产在线三区 | 亚洲乱码国产乱码精品精 | 爱爱免费| 国产精品第100页 | 国产婷婷综合网 | 成人不卡| 国产经典一区二区三区 | 亚洲精品不卡 | 亚洲激情在线观看 | 亚洲二区在线观看 | 午夜视频www| 在线看片国产 | 成人福利在线 | 欧美日本片 | 亚洲第一天堂 | 久久国产视频网站 | 午夜激情爱爱 | 日本国产精品 | 久久久成人网 | 九九热久久这里只有精品 | 日韩欧美一区在线 | 国产成人精品a视频一区www | 亚洲国产综合网 | 亚洲免费在线 | 成人av激情 | 日韩成人影院 | 久久久久久久久一区二区 | 亚洲欧美综合 | 欧美色亚洲 | 欧美成综合 | 综合欧美一区二区三区 | 日韩一区二区成人 | 99一区二区 | 男女的隐私视频网站 | 日韩精品成人免费观看视频 | 国产精品久久久久久久7电影 | 一区二区高清 | 天天综合久久 | 欧美精品中文字幕久久二区 |