(一)存儲(chǔ)過(guò)程與函數(shù)
什么是存儲(chǔ)過(guò)程?有哪些優(yōu)缺點(diǎn)?
存儲(chǔ)過(guò)程是一個(gè)預(yù)編譯的SQL語(yǔ)句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說(shuō)只需要?jiǎng)?chuàng)建一次,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL,使用存儲(chǔ)過(guò)程比單純SQL語(yǔ)句執(zhí)行要快。
優(yōu)點(diǎn)
1)存儲(chǔ)過(guò)程是預(yù)編譯過(guò)的,執(zhí)行效率高。
2)存儲(chǔ)過(guò)程的代碼直接存放于數(shù)據(jù)庫(kù)中,通過(guò)存儲(chǔ)過(guò)程名直接調(diào)用,減少網(wǎng)絡(luò)通訊。
3)安全性高,執(zhí)行存儲(chǔ)過(guò)程需要有一定權(quán)限的用戶。
4)存儲(chǔ)過(guò)程可以重復(fù)使用,減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量。
缺點(diǎn)
1)調(diào)試麻煩,但是用 PL/SQL Developer 調(diào)試很方便!彌補(bǔ)這個(gè)缺點(diǎn)。
2)移植問(wèn)題,數(shù)據(jù)庫(kù)端代碼當(dāng)然是與數(shù)據(jù)庫(kù)相關(guān)的。但是如果是做工程型項(xiàng)目,基本不存在移植問(wèn)題。
3)重新編譯問(wèn)題,因?yàn)楹蠖舜a是運(yùn)行前編譯的,如果帶有引用關(guān)系的對(duì)象發(fā)生改變時(shí),受影響的存儲(chǔ)過(guò)程、包將需要重新編譯(不過(guò)也可以設(shè)置成運(yùn)行時(shí)刻自動(dòng)編譯)。
4)如果在一個(gè)程序系統(tǒng)中大量的使用存儲(chǔ)過(guò)程,到程序交付使用的時(shí)候隨著用戶需求的增加會(huì)導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的變化,接著就是系統(tǒng)的相關(guān)問(wèn)題了,最后如果用戶想維護(hù)該系統(tǒng)可以說(shuō)是很難很難、而且代價(jià)是空前的,維護(hù)起來(lái)更麻煩。
(二)觸發(fā)器
1. 什么是觸發(fā)器?觸發(fā)器的使用場(chǎng)景有哪些?
觸發(fā)器是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊的存儲(chǔ)過(guò)程。觸發(fā)器是指一段代碼,當(dāng)觸發(fā)某個(gè)事件時(shí),自動(dòng)執(zhí)行這些代碼。
使用場(chǎng)景
a.可以通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改。
b.實(shí)時(shí)監(jiān)控某張表中的某個(gè)字段的更改而需要做出相應(yīng)的處理。
c.例如可以生成某些業(yè)務(wù)的編號(hào)。
d.注意不要濫用,否則會(huì)造成數(shù)據(jù)庫(kù)及應(yīng)用程序的維護(hù)困難。
e.大家需要牢記以上基礎(chǔ)知識(shí)點(diǎn),重點(diǎn)是理解數(shù)據(jù)類型CHAR和VARCHAR的差異,表存儲(chǔ)引擎InnoDB和MyISAM的區(qū)別。
2. MySQL中都有哪些觸發(fā)器?
在MySQL數(shù)據(jù)庫(kù)中有如下六種觸發(fā)器:
a.Before Insert
b.After Insert
c.Before Update
d.After Update
e.Before Delete
f.After Delete
最后,小編分類整理了許多java進(jìn)階學(xué)習(xí)材料和BAT面試給熱愛(ài)IT行業(yè)的你,如果需要資料的請(qǐng)轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進(jìn)階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進(jìn)行學(xué)習(xí)。