存儲過程和視圖

一、存儲過程
SQL語句要先編譯,然後再被執行。在大型數據庫系統中,爲了提高效率,將爲了完成特定功能的SQL語句集進行編譯優化後,存儲在數據庫服務器中,用戶通過指定存儲過程的名字來調用執行。

使用存儲過程可以增強SQL語句的功能和靈活性,並且可以保證數據的安全性和完整性,同時存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,也保證了數據的安全。
但存儲過程不等同於函數,兩者雖然本質上沒有區別,但還是有以下幾方面的區別:
(1)存儲過程一般是作爲獨立的部分來執行的,而函數可以作爲查詢語句的一個部分來調用
(2)一般存儲過程實現的功能較爲複雜,函數實現的功能針對性較強
(3)存儲過程可以返回多個參數,而函數只能返回一個參數
(4)函數可以嵌入在SQL中使用,可以在select中調用,但存儲過程不能
(5)函數不能直接操作實體表,只能操作內建表
(6)存儲過程在創建時即在服務器上進行了編譯,執行速度更快
————————————————

二、視圖
視圖是從數據庫的基本表中選取出來的數據組成的邏輯窗口,它是一個虛表,它包含的不是數據而是根據需要檢索數據的查詢。視圖定義了一種封裝SELECT語句的層次,可用來簡化數據處理,重新格式化或保護基礎數據。在數據庫中,存放的只是視圖的定義而已,不存放視圖包含的數據,這些視圖仍存放在原來的基本表結構中

通過引入視圖機制,用戶可以將注意力集中在其關心的數據上而非全部數據,提高了用戶效率和用戶滿意度。定義視圖可以將表與表之間複雜的操作連接和搜索條件對用戶不可見,用戶只需簡單的對一個視圖進行查詢即可,所以增加了數據的安全性,但是不能提高查詢的效率。

CREATE VIEW ProductCustomers AS --視圖必須唯一命名,創建視圖
SELECT cust_name,cust_contact,prod_id
FROM Customers,Orders,OrderItems
WHERE Customers.cust_id=Orders.cust_id AND OrderItems.order_num=Orders.order_num;  

#可以這樣使用視圖
SELECT*
FROM ProductCustomers
WHERE prod_id="RGAN01";

 

原文鏈接:https://blog.csdn.net/nawuyao/article/details/50370724

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章