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

首頁 > 數據庫 > MySQL > 正文

MySQL數據庫——初涉'存儲過程'基本操作(無參,IN,OUT)與變量術語基礎概念

2024-07-24 12:59:51
字體:
來源:轉載
供稿:網友

存儲過程

存儲過程是SQL語句和控制語句的預編譯集合,以一個名稱存儲并作為一個單元處理, 存儲過程存儲在數據庫內,可以由應用程序調用執行,而且允許用戶聲明變量,以及進行流程控制, 存儲過程可以接收參數,可以接收輸入類型的參數,也可以接收輸出類型的參數, 并且可以存在多個返回值,存儲過程的效率比一般SQL執行的效率要高

存儲過程的優點

1.增強SQL語句的功能和靈活性 2.實現較快的執行速度 3.減少網絡流量

--創建存儲過程CREATE [DEFINER = { user|CURRENT_USER }]PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_body;--調用存儲過程CALL sp_name([parameter[,...]]);CALL sp_name[()];--修改存儲過程(能修改的內容十分有限,尤其是無法修改過程體)ALTER PROCEDURE sp_name [characteristic ...];--刪除存儲過程(若是修改過程體,可直接刪除存儲過程,再重建)DROP PROCEDURE [IF EXISTS] sp_name;--proc_parameter: [IN|OUT|INOUT] param_name type/*IN:表示該參數的值必須在調用存儲過程時指定;OUT:表示該參數的值可以被存儲過程改變,并且可以返回;INOUT:跟 OUT 類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 INOUT 參數傳遞值給存儲過程;*/--characteristic:特性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}:指明誰有權限來執行*/--過程體/*1.過程體由合法的SQL語句構成;2.過程體可以是‘任意’SQL語句(不能創建數據庫,不能創建數據表,主要是對于數據的增刪改查,以及多表連接等等);3.過程體如果為復合結構則使用BEGIN...END語句;4.復合結構可以包含聲明,循環,控制結構;*/

1.創建不帶參數的存儲過程

--存儲過程示例:CREATE PROCEDURE sp1() SELECT VERSION();--就算不帶由參數,還是需要加上sp1后面的小括號--調用存儲過程(以下兩種格式都可)CALL sp1;CALL sp1();

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

--示例(假設前提條件都已滿足):DELIMITER // --修改定界符CREATE PROCEDURE rmUserById(IN p_id INT UNSIGNED)BEGINDELETE FROM users WHERE id = p_id; --id為數據表中的記錄,p_id為待接收的參數END//--調用存儲過程DELIMITER ; --將定界符改為;CALL rmUserById(2);

3.創建帶有IN和OUT類型參數的存儲過程

--示例(假設前提條件都已滿足):DELIMITER //CREATE PROCEDURE rmUserAndRtUserNums(IN p_id INT UNSIGNED,OUT u_nums INT UNSIGNED)BEGINDELETE FROM users WHERE id = p_id;SELECT count(id) FROM users INTO u_nums; --INTO,將SELECT結果放入一個變量中END//--調用存儲過程DELIMITER ; --將定界符改為;CALL rmUserAndRtUserNums(2,@nums); --此時,返回值就在@nums中SELECT @nums; --查看返回值--關于本例中這種參數形式,請看本文第五節

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

SELECT ROW_COUNT();--ROW_COUNT,得到插入、刪除、更新的被影響的記錄總數--示例(假設前提條件都已滿足):DELIMITER //CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SMALLINT UNSIGNED)BEGINDELETE FROM users WHERE age = p_age;SELECT ROW_COUNT() INTO deleteUsers; --INTO,將SELECT結果放入一個變量中SELECT COUNT(id) FROM users INTO userCounts;END//--調用存儲過程DELIMITER ; --將定界符改為;CALL rmUserByAgeAndRtInfos(20,@delUser,@userCou);SELECT @delUser,@userCou;

5.變量術語基礎概念

1.用戶變量:以”@”開始,形式為”@變量名” 用戶變量跟MySQL客戶端是綁定的,設置的變量,只對當前用戶使用的客戶端生效 2.全局變量:定義示例,SET @i = 7;對所有客戶端生效。只有具有super權限才可以設置全局變量 3.會話變量:只對連接的客戶端有效。 4.局部變量:作用范圍在 BEGIN 到 END 語句塊之間。在該語句塊里設置的變量 DECLARE語句專門用于定義局部變量。SET語句是設置不同類型的變量,包括會話變量和全局變量


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荣成市| 政和县| 汤原县| 璧山县| 奉新县| 都江堰市| 合阳县| 灵川县| 武汉市| 兴安盟| 利津县| 新疆| 雅安市| 平远县| 阿勒泰市| 兴安盟| 昌平区| 疏勒县| 融水| 衡山县| 虹口区| 灵寿县| 类乌齐县| 内丘县| 大余县| 彝良县| 高碑店市| 芦溪县| 岳阳县| 深圳市| 天峻县| 平山县| 连云港市| 河池市| 彭山县| 天全县| 阳高县| 邹城市| 香河县| 福州市| 瑞丽市|