mysql存儲(chǔ)過(guò)程的缺點(diǎn):1、存儲(chǔ)過(guò)程的構(gòu)造使得開(kāi)發(fā)具有復(fù)雜業(yè)務(wù)邏輯的存儲(chǔ)過(guò)程變得更加困難;2、很難調(diào)試存儲(chǔ)過(guò)程;3、開(kāi)發(fā)和維護(hù)存儲(chǔ)過(guò)程不容易;4、由于存儲(chǔ)過(guò)程將應(yīng)用程序綁定到數(shù)據(jù)庫(kù)上,因此使用存儲(chǔ)過(guò)程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
存儲(chǔ)過(guò)程介紹:
存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL 語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)。用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。
1、存儲(chǔ)過(guò)程只在創(chuàng)造時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需再重新編譯,而一般SQL 語(yǔ)句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過(guò)程可提高數(shù)據(jù)庫(kù)執(zhí)行速度。
2、當(dāng)對(duì)數(shù)據(jù)庫(kù)進(jìn)行復(fù)雜操作時(shí)(如對(duì)多個(gè)表進(jìn)行Update,Insert,Select,Delete 時(shí)),可將此復(fù)雜操作用存儲(chǔ)過(guò)程封裝起來(lái)與數(shù)據(jù)庫(kù)提供的事務(wù)處理結(jié)合一起使用。
3、存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量。
4、安全性高,可設(shè)定只有某個(gè)用戶才具有對(duì)指定存儲(chǔ)過(guò)程的使用權(quán)。
MySQL存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)
MySQL存儲(chǔ)過(guò)程的優(yōu)點(diǎn)
-
通常存儲(chǔ)過(guò)程有助于提高應(yīng)用程序的性能。當(dāng)創(chuàng)建,存儲(chǔ)過(guò)程被編譯之后,就存儲(chǔ)在數(shù)據(jù)庫(kù)中。 但是,MySQL實(shí)現(xiàn)的存儲(chǔ)過(guò)程略有不同。 MySQL存儲(chǔ)過(guò)程按需編譯。 在編譯存儲(chǔ)過(guò)程之后,MySQL將其放入緩存中。 MySQL為每個(gè)連接維護(hù)自己的存儲(chǔ)過(guò)程高速緩存。 如果應(yīng)用程序在單個(gè)連接中多次使用存儲(chǔ)過(guò)程,則使用編譯版本,否則存儲(chǔ)過(guò)程的工作方式類似于查詢。
-
存儲(chǔ)過(guò)程有助于減少應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器之間的流量,因?yàn)閼?yīng)用程序不必發(fā)送多個(gè)冗長(zhǎng)的SQL語(yǔ)句,而只能發(fā)送存儲(chǔ)過(guò)程的名稱和參數(shù)。
-
存儲(chǔ)的程序?qū)θ魏螒?yīng)用程序都是可重用的和透明的。 存儲(chǔ)過(guò)程將數(shù)據(jù)庫(kù)接口暴露給所有應(yīng)用程序,以便開(kāi)發(fā)人員不必開(kāi)發(fā)存儲(chǔ)過(guò)程中已支持的功能。
-
存儲(chǔ)的程序是安全的。 數(shù)據(jù)庫(kù)管理員可以向訪問(wèn)數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程的應(yīng)用程序授予適當(dāng)?shù)臋?quán)限,而不向基礎(chǔ)數(shù)據(jù)庫(kù)表提供任何權(quán)限。
除了這些優(yōu)點(diǎn)之外,存儲(chǔ)過(guò)程有其自身的缺點(diǎn),在數(shù)據(jù)庫(kù)中使用它們之前,應(yīng)該注意這些缺點(diǎn)。
MySQL存儲(chǔ)過(guò)程的缺點(diǎn)
-
如果使用大量存儲(chǔ)過(guò)程,那么使用這些存儲(chǔ)過(guò)程的每個(gè)連接的內(nèi)存使用量將會(huì)大大增加。 此外,如果您在存儲(chǔ)過(guò)程中過(guò)度使用大量邏輯操作,則CPU使用率也會(huì)增加,因?yàn)閿?shù)據(jù)庫(kù)服務(wù)器的設(shè)計(jì)不當(dāng)于邏輯運(yùn)算。
-
存儲(chǔ)過(guò)程的構(gòu)造使得開(kāi)發(fā)具有復(fù)雜業(yè)務(wù)邏輯的存儲(chǔ)過(guò)程變得更加困難。
-
很難調(diào)試存儲(chǔ)過(guò)程。只有少數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)允許您調(diào)試存儲(chǔ)過(guò)程。不幸的是,MySQL不提供調(diào)試存儲(chǔ)過(guò)程的功能。
-
開(kāi)發(fā)和維護(hù)存儲(chǔ)過(guò)程并不容易。
-
可移植性差:由于存儲(chǔ)過(guò)程將應(yīng)用程序綁定到數(shù)據(jù)庫(kù)上,因此使用存儲(chǔ)過(guò)程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性。
-
重新編譯問(wèn)題,因?yàn)楹蠖舜a是運(yùn)行前編譯的,如果帶有引用關(guān)系的對(duì)象發(fā)生改變時(shí),受影響的存儲(chǔ)過(guò)程、包將需要重新編譯(不過(guò)也可以設(shè)置成運(yùn)行時(shí)刻自動(dòng)編譯)。
【