這篇文章主要講解了“MySQL數(shù)據(jù)庫視圖的作用是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL數(shù)據(jù)庫視圖的作用是什么”吧!
沙灣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
視圖的介紹:
視圖 view 是一個虛擬表,非真實存在,其 本質(zhì)是根據(jù)SQL語句獲取動態(tài)的數(shù)據(jù)集,并為其命名,用戶使用時只需要使用視圖名稱即可獲取結(jié)果集,并可以將其當(dāng)作表來使用。
數(shù)據(jù)庫中只存放了視圖的定義,而并沒有存放視圖中的數(shù)據(jù)。數(shù)據(jù)還存在于原來的數(shù)據(jù)表中。
使用視圖查詢數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)會從原來的表中取出對應(yīng)的數(shù)據(jù)。因此, 視圖中的數(shù)據(jù)是依賴于原來表中數(shù)據(jù)的。當(dāng)表的數(shù)據(jù)發(fā)生改變,視圖中的數(shù)據(jù)也會隨之改變。
視圖的作用:
簡化代碼,我們可以把重復(fù)使用的查詢封裝成視圖重復(fù)使用,同時可以 使復(fù)雜的查詢易于理解;
更加安全,比如,如果有一張表中有很多數(shù)據(jù),很多信息不希望被其他人看到,這時就可以使用到視圖,對不同的用戶使用不同的視圖。
創(chuàng)建視圖的語法如下:
create [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
參數(shù)說明:
algorithm:表示視圖選擇的算法,可選;
view_name:創(chuàng)建的視圖名稱;
column_list:指定視圖中各個屬性的名詞,默認(rèn)情況下與SELECT語句中查詢的屬性相同;
select_statement:表示一個完整的查詢語句,將查詢記錄導(dǎo)入視圖中;
[with [cascaded | local] check option]:表示更新視圖時要保證該視圖在權(quán)限范圍之內(nèi)。
修改視圖是指修改數(shù)據(jù)庫中已存在的表的定義。當(dāng)基本表中的某些字段發(fā)生改變時,可以通過修改視圖來保持視圖和基本表之間的一致。
語法格式:
alter view 視圖名 as select語句;
并不是所有的視圖都可以更新??梢栽赨PDATE、DELETE或INSERT等語句中使用視圖,以更新基本表的內(nèi)容。對于可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關(guān)系,如果視圖包含下述結(jié)構(gòu)中的任何一種,則該視圖不可更新:
聚合函數(shù)(SUM()、MIN()、MAX()等);
DISTINCT;
HAVING;
UNION或者UNION ALL;
位于選擇列表中的子查詢;
JOIN;
FROM子句中的不可更新視圖;
WHERE子句中的子查詢,引用FROM子句中的表;
僅使用文字值(在該情況下,沒有要更新的基本表)。
注意:
視圖中雖然可以更新數(shù)據(jù),但是有很多限制。一般情況下,最好將視圖作為查詢數(shù)據(jù)的虛擬表,而不要通過視圖更新數(shù)據(jù)。
當(dāng)真實表中修改了某個存在視圖中的字段時,視圖需要更新,否則該視圖就會變成無效視圖!
重命名視圖:
rename table 視圖名 to 新視圖名;
刪除視圖:
drop view if exists 視圖名;
刪除視圖時,只刪除了視圖的定義,而并不會刪除真實表中的數(shù)據(jù)
如果想同時刪除多個視圖,則使用下面的語法格式:
drop view if exists 視圖名1, 視圖名2, 視圖名3...;
在進(jìn)行練習(xí)時可以先根據(jù)下面代碼創(chuàng)建用于練習(xí)的兩個基本表:
create table college( cno int null, cname varchar(20) null);
create table student( sid int null, name varchar(20) null, gender varchar(20) null, age int null, birth date null, address varchar(20) null, score double null);
兩表的基本數(shù)據(jù)如下圖所示:
結(jié)合之前學(xué)過的知識可以 嘗試使用子查詢和連接查詢來實現(xiàn),參考代碼如下:
SELECT cname FROM (SELECT cname, rank() over (order by avg_score desc ) item FROM (SELECT cname, avg(score) avg_score FROM student JOIN college ON sid = cno GROUP BY cname) t) tt WHERE item = 1;
在上述代碼中,先將student 與 college兩表關(guān)聯(lián),將關(guān)聯(lián)的查詢作為子表,并根據(jù)子表進(jìn)行平均數(shù)的排序,平均數(shù)序號為1的平均分?jǐn)?shù)最高,再以此為子表進(jìn)行子查詢,查詢出了平均分最高的學(xué)校。具體結(jié)果如下:
這種方式雖然能夠解決問題,但是相對復(fù)雜,不容易看懂,為了簡化代碼,我們可以將每一個子查詢創(chuàng)建為一個視圖
視圖解決方式代碼:
-- 1 視圖一,連接兩表并計算平均數(shù) CREATE VIEW t_view AS SELECT cname, avg(score) avg_score FROM student JOIN college ON sid = cno GROUP BY cname; -- 2 視圖二,利用視圖一對平均分?jǐn)?shù)進(jìn)行排序標(biāo)號 CREATE VIEW tt_view AS SELECT cname, rank() over (order by avg_score desc ) item FROM (t_view); -- 3 利用視圖查詢 SELECT cname FROM (tt_view) WHERE item = 1;
在創(chuàng)建完視圖后,如果想要查詢平均分前三名學(xué)校,則方便很多,創(chuàng)建好的視圖可以直接使用!
參考代碼及結(jié)果:
SELECT cnameFROM (tt_view)WHERE item = 1 OR item = 2 OR item = 3;
感謝各位的閱讀,以上就是“MySQL數(shù)據(jù)庫視圖的作用是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL數(shù)據(jù)庫視圖的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)站名稱:MySQL數(shù)據(jù)庫視圖的作用是什么
地址分享:http://jinyejixie.com/article16/pdcsdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、動態(tài)網(wǎng)站、電子商務(wù)、網(wǎng)站改版、網(wǎng)站營銷、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)