使用視圖背景
剛開始做機房收費系統的時候師傅說過要用上視圖、預存程序、觸發器這些東西。當時沒有太多的感覺,不知道什麼時候該用,用到哪裡。就在幾天前因為在做關於兩個表的查詢語句時,就自己建立一個視圖,然後查詢出來結果,然後就成功了。我做的有點太簡單了,在想是不是自己做錯了。上網查了一下,看了一些部落格。事實證明,它就是來簡化資料庫的操作,同時提高了速度。
視圖簡介:
視圖是一張虛擬表,是儲存在資料庫中的查詢的SQL語句,與此相關的資料並沒有再存一份於資料庫中。通過視圖看到的資料仍然存放在基表中。視圖看上去非常像資料庫中的物理表,對它的操作同任何其它的表一樣。當通過視圖修改資料時,實際上是在改變基表中的資料;相反地,基表資料的改變也會自動反映在由基表產生的視圖中。由於邏輯上的原因,有些視圖可以修改對應的基表,而有些則不能(僅僅能查詢)。
視圖的用途:
—簡單性:簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得使用者不必為以後的操作每次指定全部的條件。
— 安全性:通過視圖使用者只能查詢和修改他們所能見到的資料。資料庫中其他的資料既看不到也取不到。
— 效率性:簡化了資料操作,從很大程度上提高了查詢速度。
— 獨立性:視圖可以使應用程式和資料庫表在一定程度上獨立。
如何建立視圖?
有兩種方法:
1、——Sql Server Management Studio 中直接建立視圖:
(1)選擇資料庫中的視圖選擇建立視圖:
(2)選擇需要建立視圖的表:
(3)選擇需要顯示資訊的欄位:
(4)直接產生的查詢語句:
(5)最後儲存視圖名稱以後即可使用。
2、——使用 Transant—SQl語句建立視圖
(1)建立視圖的SQL語句的語句形式:
其中:
view_name:為新建立的視圖指定的名字,視圖名稱必須符合標識符規則。
column_name:在視圖中包含的列名,也可以在Select語句中指定列名。
table_name:視圖基表的名字。
select_statement:選擇哪些列進入視圖的Select語句。
WHERE search_condition:基表資料進入視圖所應滿足的條件。
WITH CHECK OPTION:迫使通過視圖執行的所有資料修改語句必須符合視圖定義中設定的條件。
WITH ENCRYPTION:對視圖的定義進行加密。
(2)使用SQL語句建立視圖的步驟:
—編寫使用者建立視圖的Select語句。
—對select語句進行測試。
—檢查測試結果是否正確,是否和預期的一樣。
—建立視圖。
(3)在建立視圖的時候,應該考慮一下因素:
—在CREATE VIEW語句中,不能包含order by 、compute或者compute by子句,也不能出現into關鍵字。
—建立視圖所參考基表的列數最多為1024列。
—建立視圖不能參考暫存資料表。
—在一個批處理語句中,CREATE VIEW語句不能和其他Tracsact-SQL語句混合使用。
—盡量避免使用外串連建立視圖。
視圖的使用:
視圖在程式中使用時就像普通表一樣使用,例如:
<span style="font-size:18px;"> </span><span style="font-size:14px;"> '組合查詢 管理學生資訊 查詢檢視Stu_View 串連卡和學生兩個表 Public Function CombinQueryStudent(ByVal student As Entity.ConbinQueryInfo) As DataTable Implements IDAL.IStudent.CombinQueryStudent Dim strSql As String '定義一個查詢語句字串 Dim tableName As String '定義一個資料庫表名字串 Dim table As DataTable = New DataTable Dim helper As Helper.SqlHelper = New Helper.SqlHelper Try tableName = "Student_View" '需要操作的視圖 strSql = CombinQueryDAL.CreateSqlString(student, tableName) '產生需要查詢的sql語句 table = helper.ExecuteNonQuery(strSql, CommandType.Text) Return table Catch ex As Exception Throw ex End Try End Function</span>
視圖的優點:
在程式設計的時候必須先瞭解視圖的優缺點,這樣可以揚長避短視圖除了上面所述的一些優點之外,視圖也存在一些缺點,主要如下。
● 效能:SQL Server必須把視圖的查詢轉化成對基本表的查詢,如果這個視圖是由一個複雜的多表查詢所定義,那麼,即使是視圖的一個簡單查詢,SQL Server也把它變成一個複雜的結合體,需要花費一定的時間。
● 修改限制:當使用者試圖修改視圖的某些行時,SQL Server必須把它轉化為對基本表的某些行的修改。對於簡單視圖來說,這是很方便的,但是,對於比較複雜的視圖,可能是不可修改的。
所以,在定義資料庫物件時,不能不加選擇地來定義視圖,應該權衡視圖的優點和缺點,合理地定義視圖。