預存程序--mysql

來源:互聯網
上載者:User

標籤:val   select   術語   ret   iter   cal   獨立   sele   let   

https://zhuanlan.zhihu.com/p/23423264

預存程序-官方解釋:

是sql語句和控制語句的先行編譯集合。以一個名稱儲存並作為一個單元處理。

預存程序-直白的說:

把需要的命令先行編譯好。存到資料庫。只在第一次的時候需要編譯,儲存後,以後使用的時候用戶端直接(傳參)調用。各種省事。

優點:

增強sql語句的功能性和靈活性實現較快的執行速度減少網路流量【因為往資料庫傳遞的參數少了。所以請求少了】

怎麼使用:

A、首先需要DELIMITER 語句來修改定界符B、然後建立預存程序【CREATE PROCUDURE】過程體中可以用 in 和 out 傳參。C、通過CALL來調用
為什麼使用DELITIMITER 修改定界符?
mysql預設以分號作為sql語句的結束來進行執行,當我們在建立預存程序時,為
了不讓完整的預存程序語句由於分號而提前執行,需要臨時規定以//或者$$來作
為結束符號。這樣的話,建立預存程序時,中間的分號會被忽略,直到遇到//符
號才執行語句。

注意:

A、因為預存程序的 過程體不可修改,所以設定錯誤後,一般都是刪除後,重新建立。B、設定的參數,不要和表中的欄位名字相同。DROP PROCEDURE 名字;  刪除命令

舉例:【帶有一個參數的預存程序 IN】

@var int   p_id 關聯iddelimiter // 重新定義定界符create procedure  removeUserId(IN p_id  INT  UNSIGNED)BEGINDELETE FROM users where id = p_id;END//delitimer ;  這裡是把定界符在修改回來CALL removeUserId(3); 調用

舉例:【帶有IN 和 OUT型別參數的預存程序】
@var int   p_id 關聯id@var int  userNums 刪除後剩下的條數DELITIMER //CRTEATE PROCEDURE removeAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED) 這裡設定了兩個參數BEGINDELETE FROM users WHERE id = p_id;SELECT COUNT(id) FROM USERS INTO userNums;END//DELITIMER ;CALL removeAndRrturnUserNums(27,@nums)  //這裡的@ 是使用者變數。下面是總結注意:mysql變數的術語分類:A.使用者變數:以"@"開始,形式為"@變數名"使用者變數跟mysql用戶端是綁定的,設定的變數,只對目前使用者使用的用戶端生效B、全域變數:定義時,以如下兩種形式出現,set GLOBAL 變數名  或者  set @@global.變數名 對所有用戶端生效。只有具有super許可權才可以設定全域變數


認識一個系統函數:row_count()

row_count();  得到操作行數。(單獨用沒用)例子:插入資料INSERT test(username) VALUES(‘A‘),(‘B‘),(‘C‘); SELECT ROW_COUNT(); //返回被插入的記錄總數 結果為3

舉例:【帶有多個 OUT型別參數的預存程序】

@var SMALLINT p_age 關聯p_age@var SMALLINT deleteUsers 刪除總條數@var SMALLINT  userCounts 剩餘總條數DELIMITER //CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SMALLINT UNSIGNED)BEGINDELETE FROM users WHERE WHERE age = p_age; //刪除條件SELECT ROW_COUNT() INTO deleteUsers;//返回剛刪的記錄SELECT COUNT(id) from users INTO userCounts;//得到剩餘的ID數END//DELIMITER ;CALL rmUserByAgeAndRtInfos(23, @a, @b);SELECT @a, @b;

總結:

預存程序一般都是實現複雜一些的功能預存程序一般獨立來執行。預存程序常常針對錶操作。根據需要定製預存程序。
 
 
 
 
 

預存程序--mysql

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.