存儲過程和函數是在數據庫中定義一些SQL語句的集合,然后直接調用這些存儲過程和函數來執行已經定義好的SQL語句。存儲過程和函數可以避免開發人員重復的編寫相同的SQL語句。而且,存儲過程和函數是在MySQL服務器中存儲和執行的,可以減少客戶端和服務器端的數據傳輸。
一、存儲過程
1.1、基本語法
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
Sp_name:存儲過程的名稱,默認在當前數據庫中創建。這個名稱應當盡量避免與MySQL的內置函數相同的名稱
Proc_parameter:存儲過程的參數列表
格式[IN|OUT|INOUT]param_name type
Param_name為參數名,type為參數的數據類型。多個參數彼此間用逗號分隔。輸入參數、輸出參數和輸入/輸出參數,分別用in/out/inout標識。參數的取名不要與數 據表的列名相同。
Characteristic:存儲過程的某些特征設定,分別介紹
1 COMMENT'string':用于對存儲過程的描述,其中string為描述內容,comment為關鍵字。
2 LANGUAGE SQL:指明編寫這個存儲過程的語言為SQL語言。這個選項可以不指定。
3 DETERMINISTIC:表示存儲過程對同樣的輸入參數產生相同的結果;NOT DETERMINISTIC,則表示會產生不確定的結果(默認)。
4 contains sql | no sql | reads sql data | modifies sql data Contains sql表示存儲過程包含讀或寫數據的語句(默認)
No sql表示不包含sql語句
Reads sql data表示存儲過程只包含讀數據的語句
Modifies sql data 表示存儲過程只包含寫數據的語句
5 sql security:這個特征用來指定存儲過程使用創建該存儲過程的用戶(definer)的許可來執行,還是使用調用者(invoker)的許可來執行。默認是definer
Routine_body:存儲過程的主體部分,包含了在過程調用的時候必須執行的sql語句。以begin開始,以end結束。如果存儲過程體中只有一條sql語句,可以省略begin-end標志。
1.2、數據準備
| CREATE TABLE t_user ( USER_ID INT NOT NULL AUTO_INCREMENT, USER_NAME CHAR(30) NOT NULL, USER_PASSWORD CHAR(10) NOT NULL, USER_EMAIL CHAR(30) NOT NULL, PRIMARY KEY (USER_ID), INDEX IDX_NAME (USER_NAME) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
然后這是插入的一些數據:
新聞熱點
疑難解答