1. 程式人生 > >檢視、儲存過程和函式以及觸發器

檢視、儲存過程和函式以及觸發器

一、檢視1.檢視的定義檢視是一種虛擬存在的表,它本身在資料庫中並不存在,而是在我們出於某種目的想要去使用檢視的時候,使用我們資料庫中已經存在的表的行和列資料來自定義的一種動態生成的,便於檢索的安全的資料獨立的一種虛擬表。2.優點①簡單。檢視是一種已經經過過濾篩選之後的符合條件的結果集,因此,使用檢視的使用者不需要關心對應表的表結構、關聯條件和篩選條件。②安全。使用檢視的使用者只能對檢視相關的表的列進行查詢,並不能去具體的操作表和列的許可權。③資料獨立。一旦檢視確定之後,它的資料就是獨立的,也就是說,源表的增加一個欄位對檢視沒有任何影響,源表更改和刪除檢視中存在的欄位的時候,可以通過修改檢視來解決,不會對訪問者造成影響。3.缺點 ①效能差   資料庫r必須把檢視查詢轉化成對基本表的查詢,如果這個檢視是由一個複雜的多表查詢所定義,那麼,即使是檢視的一個簡單查詢,資料庫也要把它變成一個複雜的結合體,需要花費一定的時間。因此,多表查詢使用較多的不建議使用檢視。  ②修改限制   當用戶檢視修改檢視的某些資訊時,資料庫必須把它轉化為對基本表的某些資訊的修改,對於簡單的試圖來說,這是很方便的,但是,對於比較複雜的試圖,可能是不可修改的。因此,檢視的使用一般只用來檢索資料,很少用它來修改或刪除資料。二、儲存過程和函式1.定義儲存過程和函式都是事先經過編譯並且儲存在資料庫中的一段SQL語句集合,儲存過程和函式的 執行不是由系統執行也不是手動執行的,而是由事件觸發、啟用從而事先執行的。2,.儲存過程和函式的區別①函式必須有返回值,且返回的只能是值或者表物件,而儲存過程可以有返回值,也可以沒有,返回值可以返回一個結果集,也就是多個值。②儲存過程的引數可以有IN,OUT,INOUT三種類型,而函式只能是IN型別的,且儲存過程宣告時不需要返回型別,而函式宣告時需要描述返回型別,且函式體中必須包含一個有效的RETURN語句。③一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。因為儲存函式可 以包含一組操作,而函式只能包含一個操作。④儲存過程中可以使用非確定函式,而在使用者自定義函式的主體中是不允許使用非確定函式的。⑤ SQL語句中不可用儲存過程,而可以使用函式。儲存過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函式可以作為查詢語句的一個部分來呼叫(SELECT呼叫),由於函式可以返回一個表物件,因此它可以在查詢語句中位於FROM關鍵字的後面。3.儲存過程和函式的優缺點優點:①儲存過程和函式的優勢是可以把對資料的處理放在資料庫伺服器上進行,從而避免大量的結果集傳輸到客戶端上,從而減少資料的傳輸,從而減少網路流量,執行速度較快。②儲存過程和函式可以被作為一種安全機制來利用。③儲存過程和函式允許標準組件式程式設計,提高了SQL語句的重用性、共享性和可移植性。 缺點: ①在資料庫伺服器上進行進行運算也會佔用資料庫伺服器的CPU,造成資料庫伺服器壓力,因此,不要在資料庫伺服器上進行大量的儲存過程和函式的運算,要分攤到應用伺服器上執行。②儲存過程和函式的編寫比單句SQL語句複雜。 ③在編寫儲存過程和函式時,需要建立這些資料庫物件的許可權。三、觸發器1.定義觸發器是與表有關的資料庫物件在滿足定義條件時觸發,並執行觸發器中定義的語句的集合。它的觸發是事件來觸發的也不是系統自動執行或手動呼叫執行,這一點個儲存過程一樣,因此我們可以把觸發器看成一種特殊的不存在任何輸入輸出的儲存過程。他可以協助在資料庫客戶端保證資料的完整性。2.觸發器的優缺點觸發器的優點: 以事件方式來處理. 當資料發生變化的時候, 自動作處理.缺點: 觸發器是行觸發的,因此每次對資料的增刪更新操作都會觸發進行處理,編寫過於複雜的觸發器會對記錄的增刪更新效能產生很大的影響,因此不要講過多的應用邏輯交給觸發器來處理。3,。觸發器使用時的注意事項①不能使用講資料返回到客戶端的儲存過程和函式,但是可以使用返回值型別為OUT或INOUT的儲存過程和函式。②不能在觸發器中使用以顯式或者隱式的方式開始或者結束事務的語句,如START TRANSACTION、COMMIT、ROLLBACK。③MySQL的觸發器的執行順序是按照BEFORE觸發器、行操作、AFTER觸發器的順序來執行的,任何一部出錯都不會執行下面的操作,如果是對事務表進行的操作,失敗將會回滾,如果是對非事務的操作,已經更新的資料將無法進行回滾。