SQL語(yǔ)句在執(zhí)行時(shí)要先編譯,然后再能被執(zhí)行。在大型的數(shù)據(jù)庫(kù)中,為了提高效率,將為了完成特定功能的SQL語(yǔ)句集進(jìn)行編譯優(yōu)化后,存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,用戶指定存儲(chǔ)過(guò)程的名字來(lái)調(diào)用執(zhí)行。
創(chuàng)建 MySQL 存儲(chǔ)過(guò)程的簡(jiǎn)單語(yǔ)法為:create PRocedure 存儲(chǔ)過(guò)程名字()( [in|out|inout] 參數(shù) datatype)begin MySQL 語(yǔ)句;end;使用存儲(chǔ)過(guò)程可以增強(qiáng)SQL語(yǔ)句的功能和靈活性,由于可以用流程控制語(yǔ)句編寫存儲(chǔ)過(guò)程,有很強(qiáng)的靈活性,因此可以完成復(fù)雜的判斷和運(yùn)算,并且可以保證數(shù)據(jù)的安全性和完整性。同時(shí),存儲(chǔ)過(guò)程可以使沒(méi)有權(quán)限的用戶在控制之下間接地存儲(chǔ)數(shù)據(jù)庫(kù),也保證了數(shù)據(jù)的安全、
存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)的區(qū)別:
(1)存儲(chǔ)過(guò)程一般是作為一個(gè)獨(dú)立的部分來(lái)執(zhí)行,存儲(chǔ)函數(shù)可以作為查詢語(yǔ)句的一個(gè)部分來(lái)調(diào)用,由于函數(shù)可以返回一個(gè)對(duì)象,因此可以在查詢語(yǔ)句中位于FROM關(guān)鍵字后面。
(2)一般而言,存儲(chǔ)過(guò)程是實(shí)現(xiàn)的功能較復(fù)雜,而函數(shù)實(shí)現(xiàn)的功能針對(duì)性較強(qiáng)。
(3)函數(shù)需要括號(hào)包住輸入的參數(shù),且只能返回一個(gè)對(duì)象或者表對(duì)象,而存儲(chǔ)過(guò)程可以返回多個(gè)參數(shù)。
(4)函數(shù)可以嵌入在SQL中使用,可以在select語(yǔ)句中使用,存儲(chǔ)過(guò)程不可以。
(5)函數(shù)不能直接操作實(shí)體表,只能操作內(nèi)建表。
(6)存儲(chǔ)過(guò)程在創(chuàng)建時(shí)即在服務(wù)器上進(jìn)行了編譯,其執(zhí)行速度比函數(shù)快。
新聞熱點(diǎn)
疑難解答
圖片精選