mysql 存儲過程_MySQL 存儲過程 | 學步園

本文介绍了MySQL5中的存储过程,强调了其在网络通信量减少、执行速度提升、安全性增强等方面的优势。存储过程是一组预编译的SQL语句,允许声明变量并可以通过参数调用。创建存储过程涉及定义结束符、设置权限和编写过程主体。调用存储过程只需使用CALL命令。此外,文章还提到了修改和删除存储过程的方法,以及推荐使用MYSQLQueryBrowser进行开发和管理。
摘要由CSDN通过智能技术生成

在MYSQL 5中,終於引入了存儲過程這一新特性,這將大大增強MYSQL 的數據庫處理能力,在本文中,將指導讀者快速掌握MYSQL 5的存儲過程的基本知識,帶領用戶入門。

存儲過程介紹

存儲過程是一組為了完成特定功能的SQL語句集,經編譯後存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程可由應用程序通過一個調用來執行,而且允許用戶聲明變量 。同時,存儲過程可以接收和輸出參數、返回執行存儲過程的狀態值,也可以嵌套調用。

存儲過程的特點

作為存儲過程,有以下這些優點:

(1)減少網絡通信量。調用一個行數不多的存儲過程與直接調用SQL語句的網絡通信量可能不會有很大的差別,可是如果存儲過程包含上百行SQL語句,那麼其性能絕對比一條一條的調用SQL語句要高得多。

(2)執行速度更快。存儲過程創建的時候,數據庫已經對其進行了一次解析和優化。其次,存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接中讀取。

(3)更強的安全性。存儲過程是通過向用戶授予權限(而不是基於表),它們可以提供對特定數據的訪問,提高代碼安全,比如防止 SQL注入。

(4) 業務邏輯可以封裝存儲過程中,這樣不僅容易維護,而且執行效率也高

當然存儲過程也有一些缺點,比如:

1 可移植性方面:當從一種數據庫遷移到另外一種數據庫時,不少的存儲過程的編寫要進行部分修改。

2 存儲過程需要花費一定的學習時間去學習,比如學習其語法等。

在MYSQL中,推薦使用MYSQL Query Browswer(http://dev.mysql.com/doc/query-browser/en/)這個工具去進行存儲過程的開發和管理。

下面分步驟來學習MYSQL中的存儲過程。

1 定義存儲過程的結束符

在存儲過程中,通常要輸入很多SQL語句,而SQL語句中每個語句以分號來結束,因此要告訴存儲過程,什麼位置是意味着整個存儲過程結束,所以我們在編寫存儲過程前,先定義分隔符,我們這裡定義“//”為分隔符,我們使用DELIMITER //這樣的語法,就可以定義結束符了,當然你可以自己定義其他喜歡的符號。

2 如何創建存儲過程

下面先看下一個簡單的例子,代碼如下:

DELIMITER //

CREATEPROCEDURE`p2` ()

LANGUAGE SQL

DETERMINISTIC

SQL SECURITY DEFINER

COMMENT'A procedure'

BEGIN

SELECT'Hello World !';

END//

下面講解下存儲過程的組成部分:

1)首先在定義好終結符後,使用CREATE PROCEDURE+存儲過程名的方法創建存儲過程,LANGUAGE選項指定了使用的語言,這裡默認是使用SQL。

2)DETERMINISTIC關鍵詞的作用是,當確定每次的存儲過程的輸入和輸出都是相同的內容時,可以使用該關鍵詞,否則默認為NOT DETERMINISTIC。

3) SQL SECURITY關鍵詞,是表示調用時檢查用戶的權限。當值為INVOKER時,表示是用戶調用該存儲過程時檢查,默認為DEFINER,即創建存儲過程時檢查。

4) COMMENT部分是存儲過程的注釋說明部分。

5)在BEGIN END部分中,是存儲過程的主體部分。

3 調用存儲過程的方法

調用存儲過程的方法很簡單,只需要使用call命令即可,後面跟要調用存儲過程的名稱及輸入的變量列表,比如:

CALL stored_procedure_name (param1, param2, ....)

CALL procedure1(10 ,'string parameter', @parameter_var);

4 修改和刪除存儲過程

可以用ALTER的語法去修改存儲過程的主要特徵和參數,要修改其存儲過程的主體部分的話,必須要先刪除然後再重建。比如下面修改存儲過程num_from_employee的定義。將讀寫權限改為MODIFIES SQL DATA,並指明調用者可以執行。代碼執行如下:

ALTERPROCEDUREnum_from_employee

MODIFIES SQL DATA SQL SECURITY INVOKER ;

而刪除存儲過程的語法為使用DROP關鍵詞即可。如下

DROPPROCEDUREIF EXISTS p2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值