免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
數(shù)據(jù)庫中存儲(chǔ)過程、函數(shù)、觸發(fā)器

比較項(xiàng)目

存儲(chǔ)過程

函數(shù)

是否有返回值

可以有,也可以沒有

必須有且只有一個(gè)

是否可以單獨(dú)執(zhí)行

可以

必須通過execute執(zhí)行

SQL語句(DML或SELECT)可否調(diào)用

不可以

可以,且可以位于FROM關(guān)鍵字的后面(由于可以返回表對象)

參數(shù)類型

可以使用IN、OUT、IN OUT三種模式的參數(shù)

只有IN,Oracle可以使用IN、OUT、IN OUT三種參數(shù)

返回值類型

可以通過OUT、IN OUT參數(shù)返回零個(gè)或多個(gè)參數(shù)值

單一值或一個(gè)表對象

 

【我的理解】

SQL語句: 一句SQL語句就是一個(gè)命令,而一般來說一個(gè)命令只執(zhí)行一件事。
存儲(chǔ)過程: 里面可以有多個(gè)SQL語句,用事物可以保證多句語句必須都執(zhí)行成     
          功,這個(gè)存儲(chǔ)過程才執(zhí)行。
觸發(fā)器:是在對表進(jìn)行插入、更新或刪除操作時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過程,觸發(fā)器通常用于強(qiáng)制業(yè)務(wù)規(guī)則。觸發(fā)器還是一個(gè)特殊的事務(wù)單元,當(dāng)出現(xiàn)錯(cuò)誤時(shí),可以執(zhí)行ROLLBACK TRANSACTION回滾撤銷操作。 

【站在巨人的肩膀上】 

觸發(fā)器原理:

觸發(fā)器與存儲(chǔ)過程可以說是非常相似,可以說是一種變種的存儲(chǔ)過程,觸發(fā)器和存儲(chǔ)過程一樣都是SQL語句集,通常通過創(chuàng)建觸發(fā)器來強(qiáng)制實(shí)現(xiàn)不同表中的邏輯相關(guān)數(shù)據(jù)的引用完整性和一致性。由于用戶不能繞過觸發(fā)器,所以可以用它來強(qiáng)制實(shí)施復(fù)雜的業(yè)務(wù)規(guī)則,以確保數(shù)據(jù)的完整性。觸發(fā)器不同于存儲(chǔ)過程,觸發(fā)器主要是通過事件執(zhí)行觸發(fā)而被執(zhí)行的,而存儲(chǔ)過程可以通過存儲(chǔ)過程名稱名字而直接調(diào)用。當(dāng)對某一表進(jìn)行諸如UPDATE、INSERT、DELETE這些操作時(shí),SQLSERVER就會(huì)自動(dòng)執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數(shù)據(jù)的處理必須符合這些SQL語句所定義的規(guī)則。

觸發(fā)器的作用:

觸發(fā)器的主要作用是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。它能夠?qū)?shù)據(jù)庫中的相關(guān)表進(jìn)行級聯(lián)修改,強(qiáng)制比CHECK約束更復(fù)雜的數(shù)據(jù)完整性,并自定義操作消息,維護(hù)非規(guī)范化數(shù)據(jù)以及比較數(shù)據(jù)修改前后的狀態(tài)。與CHECK約束不同,觸發(fā)器可以引用其它表中的列。在下列情況下使用觸發(fā)器實(shí)現(xiàn)復(fù)雜的引用完整性;強(qiáng)制數(shù)據(jù)間的完整性。創(chuàng)建多行觸發(fā)器,當(dāng)插入,更新、刪除多行數(shù)據(jù)時(shí),必須編寫一個(gè)處理多行數(shù)據(jù)的觸發(fā)器。執(zhí)行級聯(lián)更新或級聯(lián)刪除這樣的動(dòng)作。級聯(lián)修改數(shù)據(jù)庫中所有相關(guān)表。撤銷或者回滾違反引用完整性的操作,防止非法修改數(shù)據(jù)。

觸發(fā)器與存儲(chǔ)過程的區(qū)別:

觸發(fā)器與存儲(chǔ)過程的主要區(qū)別在于觸發(fā)器的運(yùn)行方式。存儲(chǔ)過程必須有用戶、應(yīng)用程序或者觸發(fā)器來顯示的調(diào)用并執(zhí)行,而觸發(fā)器是當(dāng)特定時(shí)間出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行或者激活的,與連接用數(shù)據(jù)庫中的用戶、或者應(yīng)用程序無關(guān)。當(dāng)一行被插入、更新或者刪除時(shí)觸發(fā)器才執(zhí)行,同時(shí)還取決于觸發(fā)器是怎樣創(chuàng)建的,當(dāng)UPDATE發(fā)生時(shí)使用一個(gè)更新觸發(fā)器,當(dāng)INSERT發(fā)生時(shí)使用一個(gè)插入觸發(fā)器,當(dāng)DELETE發(fā)生時(shí)使用一個(gè)刪除觸發(fā)器

 

存儲(chǔ)過程函數(shù)的區(qū)別:
1. 一般來說,存儲(chǔ)過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對性比較強(qiáng)。
2. 對于存儲(chǔ)過程來說可以返回參數(shù),而函數(shù)只能返回值或者表對象。
3. 存儲(chǔ)過程一般是作為一個(gè)獨(dú)立的部分來執(zhí)行,而函數(shù)可以作為查詢語句的一個(gè)部分來調(diào)用,由于函數(shù)可以返回一個(gè)表對象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面。
4. 當(dāng)存儲(chǔ)過程和函數(shù)被執(zhí)行的時(shí)候,SQL Manager會(huì)到procedure cache中去取相應(yīng)的查詢語句,如果在procedure cache里沒有相應(yīng)的查詢語句,SQL Manager就會(huì)對存儲(chǔ)過程和函數(shù)進(jìn)行編譯。
Procedure cache中保存的是執(zhí)行計(jì)劃 (execution plan) ,當(dāng)編譯好之后就執(zhí)行procedure cache中的execution plan,之后SQL SERVER會(huì)根據(jù)每個(gè)execution plan的實(shí)際情況來考慮是否要在cache中保存這個(gè)plan,評判的標(biāo)準(zhǔn)一個(gè)是這個(gè)execution plan可能被使用的頻率;其次是生成這個(gè)plan的代價(jià),也就是編譯的耗時(shí)。保存在cache中的plan在下次執(zhí)行時(shí)就不用再編譯了。
觸發(fā)器、存儲(chǔ)過程和函數(shù)三者有何區(qū)別:
觸發(fā)器是特殊的存儲(chǔ)過程,存儲(chǔ)過程需要程序調(diào)用,而觸發(fā)器會(huì)自動(dòng)執(zhí)行;
在什么時(shí)候用觸發(fā)器?要求系統(tǒng)根據(jù)某些操作自動(dòng)完成相關(guān)任務(wù)。
什么時(shí)候用存儲(chǔ)過程?
存儲(chǔ)過程就是程序,它是經(jīng)過語法檢查和編譯的SQL語句,所以運(yùn)行特別快。
存儲(chǔ)過程和用戶自定義函數(shù)具體的區(qū)別
先看定義: 存儲(chǔ)過程存儲(chǔ)過程可以使得對數(shù)據(jù)庫的管理、以及顯示關(guān)于數(shù)據(jù)庫及其用戶信息的工作容易得多。存儲(chǔ)過程是 SQL 語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。
存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強(qiáng)大的編程功能。存儲(chǔ)過程可包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。 可以出于任何使用 SQL 語句的目的來使用存儲(chǔ)過程,它具有以下優(yōu)點(diǎn): 可以在單個(gè)存儲(chǔ)過程中。

 

1)一般來說,存儲(chǔ)過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)實(shí)現(xiàn)的功能針對性比較強(qiáng)。 
2)存儲(chǔ)過程一般是作為一個(gè)獨(dú)立的部分來執(zhí)行,而函數(shù)可以作為查詢語句的一個(gè)部分來調(diào)用。由于函數(shù)可以返回一個(gè)表對象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面。

存儲(chǔ)過程

存儲(chǔ)過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中。存儲(chǔ)過程經(jīng)過語法檢查和編譯的SQL語句,所以執(zhí)行速度比普通的SQL語句的執(zhí)行速度快。用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它。

特點(diǎn)

1.       存儲(chǔ)過程只在創(chuàng)建時(shí)進(jìn)行編譯,以后執(zhí)行存儲(chǔ)過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過程可提高數(shù)據(jù)庫執(zhí)行速度。

2.       當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(shí)(如對多個(gè)表進(jìn)行Update、Insert、Query、Delete時(shí)),可將此復(fù)雜操作用存儲(chǔ)過程封裝起來。

3.       可以在過程中調(diào)用另一個(gè)存儲(chǔ)過程。可以在存儲(chǔ)過程中調(diào)用函數(shù)。這可以簡化一系列復(fù)雜語句。

4.       安全性高,可設(shè)定只有某用戶才具有對指定存儲(chǔ)過程的使用權(quán)。

5.       參數(shù)有三種(IN、OUT、IN OUT),可返回多個(gè)參數(shù)值。

6.       在ORACLE 中,若干個(gè)有聯(lián)系的過程可以組合在一起構(gòu)成程序包。

7.       存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)重要對象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲(chǔ)過程。

缺點(diǎn)

1.       不可移植性,每種數(shù)據(jù)庫的內(nèi)部編程語法都不太相同,當(dāng)需要兼容多種數(shù)據(jù)庫時(shí),最好不要用存儲(chǔ)過程。

2.       業(yè)務(wù)邏輯多處存在,采用存儲(chǔ)過程后也就意味著你的系統(tǒng)有一些業(yè)務(wù)邏輯不是在應(yīng)用程序里處理,這種架構(gòu)會(huì)增加一些系統(tǒng)維護(hù)和調(diào)試成本。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
新熱消息:存儲(chǔ)過程、函數(shù)、觸發(fā)器
Oracle數(shù)據(jù)庫課程的教與學(xué)(教學(xué)大綱)
《SQL Server數(shù)據(jù)庫應(yīng)用開發(fā)技術(shù)》第9章 用戶定義函數(shù)、存儲(chǔ)過程與觸發(fā)器
第08章 存儲(chǔ)過程、游標(biāo)和觸發(fā)器
IT公司面試手冊 - SQL Server面試題 – SQL SERVER面試資料
存儲(chǔ)過程和觸發(fā)器優(yōu)缺點(diǎn)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服