視圖的介紹:
視圖 view 是一個虛擬表,非真實存在,其 本質是根據SQL語句獲取動態的數據集,并為其命名, 用戶使用時只需要使用視圖名稱即可獲取結果集,并可以將其當作表來使用。
數據庫中只存放了視圖的定義,而并沒有存放視圖中的數據。 數據還存在于原來的數據表中。
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。因此, 視圖中的數據是依賴于原來表中數據的。 當表的數據發生改變,視圖中的數據也會隨之改變。
視圖的作用:
簡化代碼, 我們可以把重復使用的查詢封裝成視圖重復使用,同時可以 使復雜的查詢易于理解;
更加安全, 比如,如果有一張表中有很多數據,很多信息不希望被其他人看到,這時就可以使用到視圖,對不同的用戶使用不同的視圖。
創建視圖的語法如下:
create[orreplace][algorithm={undefined|merge|temptable}]viewview_name[(column_list)]asselect_statement[with[cascaded|local]checkoption]
參數說明:
algorithm: 表示視圖選擇的算法,可選;
view_name: 創建的視圖名稱;
column_list: 指定視圖中各個屬性的名詞,默認情況下與select語句中查詢的屬性相同;
select_statement: 表示一個完整的查詢語句,將查詢記錄導入視圖中;
[with [cascaded | local] check option]: 表示更新視圖時要保證該視圖在權限范圍之內。
修改視圖是指修改數據庫中已存在的表的定義。當基本表中的某些字段發生改變時,可以通過修改視圖來保持視圖和基本表之間的一致。
語法格式:
alterview視圖名asselect語句;
并不是所有的視圖都可以更新??梢栽趗pdate、delete或insert等語句中使用視圖,以更新基本表的內容。對于可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關系,如果視圖包含下述結構中的任何一種,則該視圖不可更新:
聚合函數(SUM()、MIN()、MAX()等);
DISTINCT;
HAVING;
UNION或者UNION ALL;
位于選擇列表中的子查詢;
JOIN;
FROM子句中的不可更新視圖;
WHERE子句中的子查詢,引用FROM子句中的表;
僅使用文字值(在該情況下,沒有要更新的基本表)。
注意:
視圖中雖然可以更新數據,但是有很多限制。一般情況下,最好將視圖作為查詢數據的虛擬表,而不要通過視圖更新數據。
當真實表中修改了某個存在視圖中的字段時,視圖需要更新,否則該視圖就會變成無效視圖!
重命名視圖:
renametable視圖名to新視圖名;
刪除視圖:
dropviewifexists視圖名;
刪除視圖時,只刪除了視圖的定義,而并不會刪除真實表中的數據
如果想同時刪除多個視圖,則使用下面的語法格式:
dropviewifexists視圖名1,視圖名2,視圖名3...;
在進行練習時可以先根據下面代碼創建用于練習的兩個基本表:
createtablecollege(cnointnull,cnamevarchar(20)null);
createtablestudent(sidintnull,namevarchar(20)null,gendervarchar(20)null,ageintnull,birthdatenull,addressvarchar(20)null,scoredoublenull);
兩表的基本數據如下圖所示:
結合之前學過的知識可以 嘗試使用子查詢和連接查詢 來實現,參考代碼如下:
SELECTcnameFROM(SELECTcname,rank()over(orderbyavg_scoredesc)itemFROM(SELECTcname,avg(score)avg_scoreFROMstudentJOINcollegeONsid=cnoGROUPBYcname)t)ttWHEREitem=1;
在上述代碼中,先將student 與 college兩表關聯,將關聯的查詢作為子表,并根據子表進行平均數的排序,平均數序號為1的平均分數最高,再以此為子表進行子查詢,查詢出了平均分最高的學校。具體結果如下:
這種方式雖然能夠解決問題,但是相對復雜,不容易看懂,為了簡化代碼,我們可以將每一個子查詢創建為一個視圖
視圖解決方式代碼:
--1視圖一,連接兩表并計算平均數CREATEVIEWt_viewASSELECTcname,avg(score)avg_scoreFROMstudentJOINcollegeONsid=cnoGROUPBYcname;--2視圖二,利用視圖一對平均分數進行排序標號CREATEVIEWtt_viewASSELECTcname,rank()over(orderbyavg_scoredesc)itemFROM(t_view);--3利用視圖查詢SELECTcnameFROM(tt_view)WHEREitem=1;
在創建完視圖后,如果想要查詢平均分前三名學校,則方便很多,創建好的視圖可以直接使用!
參考代碼及結果:
SELECTcnameFROM(tt_view)WHEREitem=1ORitem=2ORitem=3;
感謝各位的閱讀,以上就是“MySQL數據庫視圖的作用是什么”的內容了,經過本文的學習后,相信大家對MySQL數據庫視圖的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是本站,小編將為大家推送更多相關知識點的文章,歡迎關注!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
小學數學公式(四)1.長方體和正方體的表面積長方體或正方體的六個面的總面積叫做表面積。(1)立方體的表面積=邊長邊長6字母:s=aa6=6a。(2)長方體的表面積=(長寬+長高+寬高)2字母:s=2(ab+ah+bh)或者一個長方體的表面積=長寬 2+長高2+寬高2。字母:s=2ab+2ah+2bh。2、長方體、正方體體積空之間的物體大小稱為物體的體積,用字母v表示。(1)立方體的體積=邊長邊長邊...
MLF操作什么意思?MLF中文意思是中期借貸便利,由中國人民銀行創設,設立時間是2014年9月。MLF是央行提供的一種中期基礎貨幣的貨幣政策工作,面向的對象主要是符合宏觀審慎管理要求的商業銀行與政策性銀行,開展方式是通過招標。MLF采取質押的發行方式,并且還要投標方提供國債、央行票據、政策性金融債等優質債券作為合格質押品。MLF的作用:MLF利率可以發揮中期政策利率的作用,通過對金融機構中期融資的...
子公司是在國際商務中指由母公司投入全部或部分股份,依法在世界各地設立的東道國法人企業。子公司在法律上獨立于母公司,并擁有獨立而完整的公司管理組織體系,因而在經營方面具有較大的獨立性和一定的靈活性。那么,參股子公司是什么意思?參股與控股有什么不同?小編為您解答。參股公司是指母公司參股的企業以及全資子公司控股、參股的企業。參股公司相對于控股公司來說:控股公司是指通過持有某一公司一定數量的股份,而對該公...