《Mysql學(xué)習(xí)MySQL與存儲(chǔ)過(guò)程的相關(guān)資料》要點(diǎn):
本文介紹了Mysql學(xué)習(xí)MySQL與存儲(chǔ)過(guò)程的相關(guān)資料,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MySQL是“世界上最為流行的開(kāi)放性數(shù)據(jù)庫(kù)”,至少對(duì)于MySQL?Web站點(diǎn)會(huì)這樣.但無(wú)論MySQL如此流行,很多公司都對(duì)MySQL的使用抱有抵觸情緒.這種現(xiàn)象來(lái)自幾個(gè)原因,其中有些人錯(cuò)誤地認(rèn)為開(kāi)放性源代碼只不過(guò)相當(dāng)于小孩子的積木游戲,而另一些人認(rèn)為任何免費(fèi)的東西都不會(huì)是好東西.也許這些想法都是誤解,然而有一種抱怨卻是合理的,即與其它對(duì)應(yīng)的產(chǎn)品不一樣,比如Oracle或者?DB2,MySQL不能夠支持存儲(chǔ)過(guò)程(stored?procedures).?
最新的MySQL?5.0能夠支持存儲(chǔ)過(guò)程.如果你對(duì)存儲(chǔ)過(guò)程還沒(méi)有熟悉,那么你可以認(rèn)為它們只是存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器端的SQL命令和程序邏輯的集合.這些存儲(chǔ)過(guò)程可以被應(yīng)用程序調(diào)用,使得不同技術(shù)水平的開(kāi)發(fā)人員能夠建立自己的SQL.
優(yōu)點(diǎn)?存儲(chǔ)過(guò)程能夠允許絕大部分的數(shù)據(jù)庫(kù)訪問(wèn)邏輯與程序邏輯分離開(kāi)來(lái).使用存儲(chǔ)過(guò)程的其中一個(gè)間接的優(yōu)點(diǎn)是,程序的代碼變得更加小巧和容易理解.存儲(chǔ)過(guò)程的另一優(yōu)點(diǎn)是,SQL可以被預(yù)先編譯,由此提高了程序的速度.因?yàn)榇鎯?chǔ)過(guò)程包含程序邏輯,可以在數(shù)據(jù)庫(kù)服務(wù)器端更多地執(zhí)行更多的處理.同樣,當(dāng)執(zhí)行一個(gè)n-tier程序時(shí),存儲(chǔ)過(guò)程被用于將數(shù)據(jù)層與服務(wù)層分離開(kāi)來(lái).
安全性也是存儲(chǔ)過(guò)程的另一優(yōu)點(diǎn).當(dāng)不能直接訪問(wèn)表格時(shí),程序可以將執(zhí)行優(yōu)先級(jí)別分配給存儲(chǔ)過(guò)程.不幸的是,在這時(shí)候,MySQL不支持“授予執(zhí)行(GRANT?EXECUTE)”.這就意味著除非程序具有訪問(wèn)表格的權(quán)限,否則調(diào)用訪問(wèn)相同表格的一個(gè)存儲(chǔ)過(guò)程也是不行的.使用這一特性有點(diǎn)像在做一個(gè)很有趣的賭博.
標(biāo)準(zhǔn)?與Oracle或者微軟的相關(guān)數(shù)據(jù)庫(kù)不一樣,MySQL和IBM的DB2能夠遵循存儲(chǔ)程序的SQL:2003語(yǔ)法.在理論上這意味著,如果數(shù)據(jù)庫(kù)結(jié)構(gòu)相同,存儲(chǔ)程序可以在不同數(shù)據(jù)庫(kù)中使用.
可支持的SQL聲明?雖然MySQL不能支持存儲(chǔ)程序,但它卻可以完成很多任務(wù),如表A所示.除此之外,MySQL的stored?procedure?documentation(存儲(chǔ)過(guò)程文檔)描述了可用于Oracle的PL/SQL和SQL?Server的?T-SQL的很多兼容特性.我對(duì)存儲(chǔ)過(guò)程支持的印象是,它執(zhí)行比較緩慢,目的是避免任何影響大型軟件開(kāi)發(fā)工程的步驟.
表A
MYSQL實(shí)例聲明
|
MYSQL實(shí)例描述
|
MYSQL實(shí)例CREATE PROCEDURE
|
MYSQL實(shí)例建立一個(gè)存放在MySQL數(shù)據(jù)庫(kù)的表格的存儲(chǔ)過(guò)程.
|
MYSQL實(shí)例CREATE FUNCTION
|
MYSQL實(shí)例建立一個(gè)用戶自定義的函數(shù),尤其是返回?cái)?shù)據(jù)的存儲(chǔ)過(guò)程.
|
MYSQL實(shí)例ALTER PROCEDURE
|
MYSQL實(shí)例更改用CREATE PROCEDURE 建立的預(yù)先指定的存儲(chǔ)過(guò)程,其不會(huì)影響相關(guān)存儲(chǔ)過(guò)程或存儲(chǔ)功能..
|
MYSQL實(shí)例ALTER FUNCTION
|
MYSQL實(shí)例更改用CREATE FUNCTION 建立的預(yù)先指定的存儲(chǔ)過(guò)程,其不會(huì)影響相關(guān)存儲(chǔ)過(guò)程或存儲(chǔ)功能..
|
MYSQL實(shí)例DROP PROCEDURE
|
MYSQL實(shí)例從MySQL的表格中刪除一個(gè)或多個(gè)存儲(chǔ)過(guò)程.
|
MYSQL實(shí)例DROP FUNCTION
|
MYSQL實(shí)例從MySQL的表格中刪除一個(gè)或多個(gè)存儲(chǔ)函數(shù).
|
MYSQL實(shí)例SHOW CREATE PROCEDURE
|
MYSQL實(shí)例返回使用CREATE PROCEDURE 建立的預(yù)先指定的存儲(chǔ)過(guò)程的文本.這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展.
|
MYSQL實(shí)例SHOW CREATE FUNCTION
|
MYSQL實(shí)例返回使用CREATE??FUNCTION建立的預(yù)先指定的存儲(chǔ)過(guò)程的文本.這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展.
|
MYSQL實(shí)例SHOW PROCEDURE STATUS
|
MYSQL實(shí)例返回一個(gè)預(yù)先指定的存儲(chǔ)過(guò)程的特性,包括名稱、類型、建立者、建立日期、以及更改日期.這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展.
|
MYSQL實(shí)例SHOW FUNCTION STATUS
|
MYSQL實(shí)例返回一個(gè)預(yù)先指定的存儲(chǔ)函數(shù)的特性,包括名稱、類型、建立者、建立日期、以及更改日期.這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展.
|
MYSQL實(shí)例CALL
|
MYSQL實(shí)例調(diào)用一個(gè)使用CREATE PROCEDURE建立的預(yù)先指定的存儲(chǔ)過(guò)程.
|
MYSQL實(shí)例BEGIN ... END
|
MYSQL實(shí)例包含一組執(zhí)行的多聲明.
|
MYSQL實(shí)例DECLARE
|
MYSQL實(shí)例用于指定當(dāng)?shù)刈兞俊h(huán)境、處理器,以及指針.
|
MYSQL實(shí)例SET
|
MYSQL實(shí)例用于更改當(dāng)?shù)睾腿址?wù)器變量的值.
|
MYSQL實(shí)例SELECT ... INTO
|
MYSQL實(shí)例用于存儲(chǔ)顯示變量的縱列.
|
MYSQL實(shí)例OPEN
|
MYSQL實(shí)例用于打開(kāi)一個(gè)指針.
|
MYSQL實(shí)例FETCH
|
MYSQL實(shí)例使用特定指針來(lái)獲得下一列.
|
MYSQL實(shí)例CLOSE
|
MYSQL實(shí)例用于關(guān)閉和打開(kāi)指針.
|
MYSQL實(shí)例IF
|
MYSQL實(shí)例一個(gè)An if-then-else-end if 聲明.
|
MYSQL實(shí)例CASE ... WHEN
|
MYSQL實(shí)例一個(gè) case聲明的結(jié)構(gòu)
|
MYSQL實(shí)例LOOP
|
MYSQL實(shí)例一個(gè)簡(jiǎn)單的循環(huán)結(jié)構(gòu);可以使用LEAVE 語(yǔ)句來(lái)退出.
|
MYSQL實(shí)例LEAVE
|
MYSQL實(shí)例用于退出IF,CASE,LOOP,REPEAT以及WHILE 語(yǔ)句.
|
MYSQL實(shí)例ITERATE
|
MYSQL實(shí)例用于重新開(kāi)始循環(huán).
|
MYSQL實(shí)例REPEAT
|
MYSQL實(shí)例在結(jié)束時(shí)測(cè)試的循環(huán).
|
MYSQL實(shí)例WHILE
|
MYSQL實(shí)例在開(kāi)始時(shí)測(cè)試的循環(huán).
|
MYSQL實(shí)例RETURNS
|
MYSQL實(shí)例返回一個(gè)存儲(chǔ)過(guò)程的值.
|
|
MySQL 5.0支持存儲(chǔ)過(guò)程語(yǔ)句.
重要的是,請(qǐng)記住當(dāng)前的MySQL對(duì)存儲(chǔ)過(guò)程的支持沒(méi)有Oracle,SQL Server或者DB2的成熟.同樣記住,具有少量的特性但卻操作良好,這比具有大量特性但卻錯(cuò)誤百出的強(qiáng)得多,這一點(diǎn)更加重要.我知道這是一個(gè)比較奇怪的概念,但社區(qū)里的很多人有時(shí)候卻被其它一些概念所迷惑.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6401.html