相關閱讀:
MySQL入門教程(五)之表的建立、修改和刪除
視圖是從一個或多個表中匯出來的虛擬表。視圖就像一個視窗,通過這個視窗可以看到系統專門提供的資料。
1、視圖簡介
1.1 視圖的含義
視圖是從一個或多個表中匯出來的虛擬表,還可以從已經存在的視圖的基礎上定義。
資料庫中只存放視圖的定義,而不存放視圖中的資料,這些資料仍存放在原來的表中。一旦表中的資料發生變化,顯示在視圖中的資料也會相應變化。
MySQL的視圖並不支援輸入參數的功能,即互動性上較差,但對於變化不是很大的操作,使用視圖可以很大程度上簡化使用者的操作。
1.2 視圖的作用
視圖起著類似於篩選的作用,具體可歸納為
(1)所見即所需,使操作簡單化
(2)通過視圖,使用者只能查詢和修改指定的資料,從而限制了使用者的許可權,增加了資料的安全性
(3)視圖可以屏蔽原有表結構變化帶來的影響,從而提高了表的邏輯獨立性。
2、建立視圖
MySQL中,建立視圖是通過Creat View語句實現的,具體為
其中,Algorithm為視圖選擇的演算法;屬性清單指定了視圖中各個屬性的名詞,預設情況下與Select語句中查詢的屬性相同;Select語句是一個完整的查詢語句,表示從某個表中查出某些滿足條件的記錄並將這些記錄匯入到視圖中;With Check Option表示更新視圖時要保證在該視圖的許可權範圍之內,CASCADED表示更新視圖時要滿足所有相關視圖和表的條件,為預設值,Local表示更新視圖時要滿足該視圖本身的定義即可;注意在使用建立視圖時最好加上With Check Option,並選取預設的CASCADED參數。從而保證從視圖派生出來的新視圖在更新後可以考慮其父視圖的約束條件,即更嚴謹。
(1)關於Algorithm中的三個選項,Undefined選項表示MySQL將自動選擇所要使用的演算法,Merge選項表示將使用視圖的語句與視圖定義合并起來,使得視圖定義的某一部分代替語句的對應部分,Temptable選項表示將視圖的結果存入暫存資料表,然後使用暫存資料表執行語句。
(2)需要注意的是,在建立視圖之前,需要檢查是否具有Create view的許可權和查詢涉及的列的Select許可權,這些許可權儲存在MySQL資料庫下面的user表中,可以適用select語句查詢,具體為
select select_priv, create_view_priv from mysql.user where user='使用者名稱'
其中,使用者名稱參數表示要查詢哪個使用者是否擁有Drop許可權,在我的系統中,只有root使用者。
下面是一個從department表和worker表上建立一個名為worker_view1的視圖的案例
3、查看視圖
查看視圖必須要有show view的許可權,同樣儲存在user表中。
查看視圖的方法包括describe語句、show table status語句、show create view語句和查詢information_schema資料庫下的views表等。
3.1 describe語句查看簡單資訊
查看視圖的describe語句和查看錶的語句是一樣的,因為視圖是一種特殊的表,基本形式為
describe 視圖名;
3.2 show table status語句查看基本資料
基本形式為
Show Table Status Like ‘視圖名';
3.3 show create view語句查看詳細資料
基本形式為
Show create view 視圖名;
3.4 在views表中查看詳細資料
MySQL中,所有視圖的定義都存在information_schema資料庫下的views表中,查詢此表即可查看到資料庫中所有視圖的詳細資料。
基本形式為
select * from information_schema.views;
其中*表示查詢所有的列的資訊。
顯然用此語句查看到的是所有的視圖,不方便查閱,一般查詢詳細資料時用3.3法即可。
4、修改視圖
當基本表的某些欄位發生改變時,有必要修改視圖的定義來保持視圖和基本表之間的一致性。
4.1 Create or replace view語句
此語句很好用,在存在視圖情況下可對視圖進行修改,在沒有視圖情況下,可以建立視圖,具體文法為
實際上,感覺此語句就是重新定義了個視圖並覆蓋了原始圖。<喎�"http://www.jb51.net/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="42-alter語句">4.2 Alter語句
回顧前面,alter語句不僅可以建立索引,修改表的定義,在此處,還可以修改視圖的定義。
基本形式為
5、更新視圖
更新視圖是指通過視圖來插入、更新和刪除表中的資料。
更新視圖時,只能更新許可權範圍內的資料。
實際上對視圖的更新最後都是實現在基本表上的。
注意以下情況不能更新視圖:
(1)視圖中包含sum(),count(),max()和min()等函數
(2)視圖中包含union,union all,distinct,group by和having等關鍵字
(3)常量視圖,即視圖中的某個欄位時常量類型
(4)視圖中的select中包含子查詢
(5)由不可更新的視圖匯出的視圖
(6)建立視圖時,algorithm選擇了temptable類型,即系統預設暫存資料表是不可更新的
(7)視圖對應的表上存在沒有預設值的列,且該列沒有包含在視圖中。因為,在更新視圖時,這個沒有預設值的記錄將沒有值插入,也沒有NULL值插入,系統不允許這種情況出現
由於視圖的更新存在很多限制,一般,最好把視圖作為查詢資料的虛擬表,而不要通過視圖來更新資料,很容易造成更新失敗。
6、刪除視圖
刪除視圖只會刪除視圖的定義,並不會刪除資料。DROP View語句可用來刪除視圖,但使用者必須擁有drop的許可權,具體操作為
drop view [if exists] 視圖名列表 [restrict|cascade]
其中,if exists用來判斷視圖存在,存在才執行;在視圖名列表中不同視圖名稱之間通過逗號隔開。
以上所述是小編給大家介紹的MySQL入門教程(七)之視圖,希望對大家有所協助!