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