【我的理解】 SQL語句: 一句SQL語句就是一個命令,而一般來說一個命令只執(zhí)行一件事。 【站在巨人的肩膀上】 觸發(fā)器原理: 觸發(fā)器與存儲過程可以說是非常相似,可以說是一種變種的存儲過程,觸發(fā)器和存儲過程一樣都是SQL語句集,通常通過創(chuàng)建觸發(fā)器來強制實現(xiàn)不同表中的邏輯相關(guān)數(shù)據(jù)的引用完整性和一致性。由于用戶不能繞過觸發(fā)器,所以可以用它來強制實施復雜的業(yè)務規(guī)則,以確保數(shù)據(jù)的完整性。觸發(fā)器不同于存儲過程,觸發(fā)器主要是通過事件執(zhí)行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名稱名字而直接調(diào)用。當對某一表進行諸如UPDATE、INSERT、DELETE這些操作時,SQLSERVER就會自動執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數(shù)據(jù)的處理必須符合這些SQL語句所定義的規(guī)則。 觸發(fā)器的作用: 觸發(fā)器的主要作用是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復雜的參照完整性和數(shù)據(jù)的一致性。它能夠?qū)?shù)據(jù)庫中的相關(guān)表進行級聯(lián)修改,強制比CHECK約束更復雜的數(shù)據(jù)完整性,并自定義操作消息,維護非規(guī)范化數(shù)據(jù)以及比較數(shù)據(jù)修改前后的狀態(tài)。與CHECK約束不同,觸發(fā)器可以引用其它表中的列。在下列情況下使用觸發(fā)器實現(xiàn)復雜的引用完整性;強制數(shù)據(jù)間的完整性。創(chuàng)建多行觸發(fā)器,當插入,更新、刪除多行數(shù)據(jù)時,必須編寫一個處理多行數(shù)據(jù)的觸發(fā)器。執(zhí)行級聯(lián)更新或級聯(lián)刪除這樣的動作。級聯(lián)修改數(shù)據(jù)庫中所有相關(guān)表。撤銷或者回滾違反引用完整性的操作,防止非法修改數(shù)據(jù)。 觸發(fā)器與存儲過程的區(qū)別: 觸發(fā)器與存儲過程的主要區(qū)別在于觸發(fā)器的運行方式。存儲過程必須有用戶、應用程序或者觸發(fā)器來顯示的調(diào)用并執(zhí)行,而觸發(fā)器是當特定時間出現(xiàn)的時候,自動執(zhí)行或者激活的,與連接用數(shù)據(jù)庫中的用戶、或者應用程序無關(guān)。當一行被插入、更新或者刪除時觸發(fā)器才執(zhí)行,同時還取決于觸發(fā)器是怎樣創(chuàng)建的,當UPDATE發(fā)生時使用一個更新觸發(fā)器,當INSERT發(fā)生時使用一個插入觸發(fā)器,當DELETE發(fā)生時使用一個刪除觸發(fā)器
存儲過程和函數(shù)的區(qū)別:
1)一般來說,存儲過程實現(xiàn)的功能要復雜一點,而函數(shù)實現(xiàn)的功能針對性比較強。 存儲過程 存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。存儲過程經(jīng)過語法檢查和編譯的SQL語句,所以執(zhí)行速度比普通的SQL語句的執(zhí)行速度快。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。 特點 1. 存儲過程只在創(chuàng)建時進行編譯,以后執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。 2. 當對數(shù)據(jù)庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來。 3. 可以在過程中調(diào)用另一個存儲過程??梢栽诖鎯^程中調(diào)用函數(shù)。這可以簡化一系列復雜語句。 4. 安全性高,可設定只有某用戶才具有對指定存儲過程的使用權(quán)。 5. 參數(shù)有三種(IN、OUT、IN OUT),可返回多個參數(shù)值。 6. 在ORACLE 中,若干個有聯(lián)系的過程可以組合在一起構(gòu)成程序包。 7. 存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設計良好的數(shù)據(jù)庫應用程序都應該用到存儲過程。 缺點 1. 不可移植性,每種數(shù)據(jù)庫的內(nèi)部編程語法都不太相同,當需要兼容多種數(shù)據(jù)庫時,最好不要用存儲過程。 2. 業(yè)務邏輯多處存在,采用存儲過程后也就意味著你的系統(tǒng)有一些業(yè)務邏輯不是在應用程序里處理,這種架構(gòu)會增加一些系統(tǒng)維護和調(diào)試成本。 |
|
|
來自: liang1234_ > 《存儲過程》