MySQL與預存程序的相關資料

來源:互聯網
上載者:User

MySQL是“世界上最為流行的開放性資料庫”,至少對於MySQL Web網站會這樣。但無論MySQL如此流行,很多公司都對MySQL的使用抱有抵觸情緒。這種現象來自幾個原因,其中有些人錯誤地認為開放性原始碼只不過相當於小孩子的積木遊戲,而另一些人認為任何免費的東西都不會是好東西。也許這些想法都是誤解,然而有一種抱怨卻是合理的,即與其它對應的產品不一樣,比如Oracle或者 DB2,MySQL不能夠支援預存程序(stored procedures)。

最新的MySQL 5.0能夠支援預存程序。如果你對預存程序還沒有熟悉,那麼你可以認為它們只是儲存在資料庫伺服器端的SQL命令和程式邏輯的集合。這些預存程序可以被應用程式調用,使得不同技術水平的開發人員能夠建立自己的SQL。
優點 預存程序能夠允許絕大部分的資料庫訪問邏輯與程式邏輯分離開來。使用預存程序的其中一個間接的優點是,程式的代碼變得更加小巧和容易理解。預存程序的另一優點是,SQL可以被預先編譯,由此提高了程式的速度。因為預存程序包含程式邏輯,可以在資料庫伺服器端更多地執行更多的處理。同樣,當執行一個n-tier程式時,預存程序被用於將資料層與服務層分離開來。
安全性也是預存程序的另一優點。當不能直接存取表格時,程式可以將執行優先順序別分配給預存程序。不幸的是,在這時候,MySQL不支援“授予執行(GRANT EXECUTE)”。這就意味著除非程式具有訪問表格的許可權,否則調用訪問相同表格的一個預存程序也是不行的。使用這一特性有點像在做一個很有趣的賭博。
標準 與Oracle或者微軟的相關資料庫不一樣,MySQL和IBM的DB2能夠遵循儲存程式的SQL:2003文法。在理論上這意味著,如果資料庫結構相同,儲存程式可以在不同資料庫中使用。
可支援的SQL聲明 雖然MySQL不能支援儲存程式,但它卻可以完成很多任務,如表A所示。除此之外,MySQL的stored procedure documentation(預存程序文檔)描述了可用於Oracle的PL/SQL和SQL Server的 T-SQL的很多相容特性。我對預存程序支援的印象是,它執行比較緩慢,目的是避免任何影響大型軟體開發工程的步驟。
表A

聲明

描述

CREATE PROCEDURE

建立一個存放在MySQL資料庫的表格的預存程序。

CREATE FUNCTION

建立一個使用者自訂的函數,尤其是返回資料的預存程序。

ALTER PROCEDURE

更改用CREATE PROCEDURE 建立的預先指定的預存程序,其不會影響相關預存程序或儲存功能。.

ALTER FUNCTION

更改用CREATE FUNCTION 建立的預先指定的預存程序,其不會影響相關預存程序或儲存功能。.

DROP PROCEDURE

從MySQL的表格中刪除一個或多個預存程序。

DROP FUNCTION

從MySQL的表格中刪除一個或多個儲存函數。

SHOW CREATE PROCEDURE

返回使用CREATE PROCEDURE 建立的預先指定的預存程序的文本。這一聲明是SQL:2003規範的一個MySQL擴充。

SHOW CREATE FUNCTION

返回使用CREATE FUNCTION建立的預先指定的預存程序的文本。這一聲明是SQL:2003規範的一個MySQL擴充。

SHOW PROCEDURE STATUS

返回一個預先指定的預存程序的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規範的一個MySQL擴充。

SHOW FUNCTION STATUS

返回一個預先指定的儲存函數的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規範的一個MySQL擴充。

CALL

調用一個使用CREATE PROCEDURE建立的預先指定的預存程序。

BEGIN ... END

包含一組執行的多聲明。

DECLARE

用於指定當地變數、環境、處理器,以及指標。

SET

用於更改當地和全域伺服器變數的值。

SELECT ... INTO

用於儲存顯示變數的縱列。

OPEN

用於開啟一個指標。

FETCH

使用特定指標來獲得下一列。

CLOSE

用於關閉和開啟指標。

IF

一個An if-then-else-end if 聲明。

CASE ... WHEN

一個 case聲明的結構

LOOP

一個簡單的迴圈結構;可以使用LEAVE 語句來退出。

LEAVE

用於退出IF,CASE,LOOP,REPEAT以及WHILE 語句。

ITERATE

用於重新開始迴圈。

REPEAT

在結束時測試的迴圈。

WHILE

在開始時測試的迴圈。

RETURNS

返回一個預存程序的值。

MySQL 5.0支援預存程序語句。

重要的是,請記住當前的MySQL對預存程序的支援沒有Oracle,SQL Server或者DB2的成熟。同樣記住,具有少量的特性但卻操作良好,這比具有大量特性但卻錯誤百出的強得多,這一點更加重要。我知道這是一個比較奇怪的概念,但社區裡的很多人有時候卻被其它一些概念所迷惑。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.