MySQL入門教程(七)之視圖
相關(guān)閱讀:
MySQL入門教程(五)之表的創(chuàng)建、修改和刪除
視圖是從一個或多個表中導出來的虛擬表。視圖就像一個窗口,通過這個窗口可以看到系統(tǒng)專門提供的數(shù)據(jù)。
1、視圖簡介
1.1 視圖的含義
視圖是從一個或多個表中導出來的虛擬表,還可以從已經(jīng)存在的視圖的基礎上定義。
數(shù)據(jù)庫中只存放視圖的定義,而不存放視圖中的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來的表中。一旦表中的數(shù)據(jù)發(fā)生變化,顯示在視圖中的數(shù)據(jù)也會相應變化。
MySQL的視圖并不支持輸入?yún)?shù)的功能,即交互性上較差,但對于變化不是很大的操作,使用視圖可以很大程度上簡化用戶的操作。
1.2 視圖的作用
視圖起著類似于篩選的作用,具體可歸納為
(1)所見即所需,使操作簡單化
(2)通過視圖,用戶只能查詢和修改指定的數(shù)據(jù),從而限制了用戶的權(quán)限,增加了數(shù)據(jù)的安全性
(3)視圖可以屏蔽原有表結(jié)構(gòu)變化帶來的影響,從而提高了表的邏輯獨立性。
2、創(chuàng)建視圖
MySQL中,創(chuàng)建視圖是通過Creat View語句實現(xiàn)的,具體為
其中,Algorithm為視圖選擇的算法;屬性清單指定了視圖中各個屬性的名詞,默認情況下與Select語句中查詢的屬性相同;Select語句是一個完整的查詢語句,表示從某個表中查出某些滿足條件的記錄并將這些記錄導入到視圖中;With Check Option表示更新視圖時要保證在該視圖的權(quán)限范圍之內(nèi),CASCADED表示更新視圖時要滿足所有相關(guān)視圖和表的條件,為默認值,Local表示更新視圖時要滿足該視圖本身的定義即可;注意在使用創(chuàng)建視圖時最好加上With Check Option,并選取默認的CASCADED參數(shù)。從而保證從視圖派生出來的新視圖在更新后可以考慮其父視圖的約束條件,即更嚴謹。
(1)關(guān)于Algorithm中的三個選項,Undefined選項表示MySQL將自動選擇所要使用的算法,Merge選項表示將使用視圖的語句與視圖定義合并起來,使得視圖定義的某一部分代替語句的對應部分,Temptable選項表示將視圖的結(jié)果存入臨時表,然后使用臨時表執(zhí)行語句。
(2)需要注意的是,在創(chuàng)建視圖之前,需要檢查是否具有Create view的權(quán)限和查詢涉及的列的Select權(quán)限,這些權(quán)限保存在MySQL數(shù)據(jù)庫下面的user表中,可以適用select語句查詢,具體為
select select_priv, create_view_priv from mysql.user where user='用戶名'
其中,用戶名參數(shù)表示要查詢哪個用戶是否擁有Drop權(quán)限,在我的系統(tǒng)中,只有root用戶。
下面是一個從department表和worker表上創(chuàng)建一個名為worker_view1的視圖的案例
3、查看視圖
查看視圖必須要有show view的權(quán)限,同樣保存在user表中。
查看視圖的方法包括describe語句、show table status語句、show create view語句和查詢information_schema數(shù)據(jù)庫下的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數(shù)據(jù)庫下的views表中,查詢此表即可查看到數(shù)據(jù)庫中所有視圖的詳細信息。
基本形式為
select * from information_schema.views;
其中*表示查詢所有的列的信息。
顯然用此語句查看到的是所有的視圖,不方便查閱,一般查詢詳細信息時用3.3法即可。
4、修改視圖
當基本表的某些字段發(fā)生改變時,有必要修改視圖的定義來保持視圖和基本表之間的一致性。
4.1 Create or replace view語句
此語句很好用,在存在視圖情況下可對視圖進行修改,在沒有視圖情況下,可以創(chuàng)建視圖,具體語法為
實際上,感覺此語句就是重新定義了個視圖并覆蓋了原始圖。<喎�"http://www.dbjr.com.cn/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="42-alter語句">4.2 Alter語句
回顧前面,alter語句不僅可以創(chuàng)建索引,修改表的定義,在此處,還可以修改視圖的定義。
基本形式為
5、更新視圖
更新視圖是指通過視圖來插入、更新和刪除表中的數(shù)據(jù)。
更新視圖時,只能更新權(quán)限范圍內(nèi)的數(shù)據(jù)。
實際上對視圖的更新最后都是實現(xiàn)在基本表上的。
注意以下情況不能更新視圖:
(1)視圖中包含sum(),count(),max()和min()等函數(shù)
(2)視圖中包含union,union all,distinct,group by和having等關(guān)鍵字
(3)常量視圖,即視圖中的某個字段時常量類型
(4)視圖中的select中包含子查詢
(5)由不可更新的視圖導出的視圖
(6)創(chuàng)建視圖時,algorithm選擇了temptable類型,即系統(tǒng)默認臨時表是不可更新的
(7)視圖對應的表上存在沒有默認值的列,且該列沒有包含在視圖中。因為,在更新視圖時,這個沒有默認值的記錄將沒有值插入,也沒有NULL值插入,系統(tǒng)不允許這種情況出現(xiàn)
由于視圖的更新存在很多限制,一般,最好把視圖作為查詢數(shù)據(jù)的虛擬表,而不要通過視圖來更新數(shù)據(jù),很容易造成更新失敗。
6、刪除視圖
刪除視圖只會刪除視圖的定義,并不會刪除數(shù)據(jù)。DROP View語句可用來刪除視圖,但用戶必須擁有drop的權(quán)限,具體操作為
drop view [if exists] 視圖名列表 [restrict|cascade]
其中,if exists用來判斷視圖存在,存在才執(zhí)行;在視圖名列表中不同視圖名稱之間通過逗號隔開。
以上所述是小編給大家介紹的MySQL入門教程(七)之視圖,希望對大家有所幫助!
相關(guān)文章
安裝配置mysql及Navicat prenium的詳細流程
這篇文章主要介紹了安裝配置mysql及Navicat Premium的詳細流程,配置方法也真的很簡單,本文給大家詳細介紹mysql Navicat Premium安裝配置相關(guān)知識感興趣的朋友,一起學習吧2021-06-06phpmyadmin顯示MySQL數(shù)據(jù)表“使用中” 修復后依然無效的解決方法
這篇文章主要介紹了phpmyadmin顯示MySQL數(shù)據(jù)表“使用中” 修復后依然無效的解決方法,需要的朋友可以參考下2014-07-07與MSSQL對比學習MYSQL的心得(四)--BLOB數(shù)據(jù)類型
在MYSQL中BLOB是一個二進制大對象,用來儲存可變數(shù)量的數(shù)據(jù),而MSSQL中并沒有BLOB數(shù)據(jù)類型,只有大型對象數(shù)據(jù)類型(LOB)2014-06-06