您好,登錄后才能下訂單哦!
這篇文章主要講解了“MySQL數據庫視圖的作用是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL數據庫視圖的作用是什么”吧!
視圖的介紹:
視圖 view 是一個虛擬表,非真實存在,其 本質是根據SQL語句獲取動態的數據集,并為其命名, 用戶使用時只需要使用視圖名稱即可獲取結果集,并可以將其當作表來使用。
數據庫中只存放了視圖的定義,而并沒有存放視圖中的數據。 數據還存在于原來的數據表中。
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。因此, 視圖中的數據是依賴于原來表中數據的。 當表的數據發生改變,視圖中的數據也會隨之改變。
視圖的作用:
簡化代碼, 我們可以把重復使用的查詢封裝成視圖重復使用,同時可以 使復雜的查詢易于理解;
更加安全, 比如,如果有一張表中有很多數據,很多信息不希望被其他人看到,這時就可以使用到視圖,對不同的用戶使用不同的視圖。
創建視圖的語法如下:
create [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
參數說明:
algorithm: 表示視圖選擇的算法,可選;
view_name: 創建的視圖名稱;
column_list: 指定視圖中各個屬性的名詞,默認情況下與SELECT語句中查詢的屬性相同;
select_statement: 表示一個完整的查詢語句,將查詢記錄導入視圖中;
[with [cascaded | local] check option]: 表示更新視圖時要保證該視圖在權限范圍之內。
修改視圖是指修改數據庫中已存在的表的定義。當基本表中的某些字段發生改變時,可以通過修改視圖來保持視圖和基本表之間的一致。
語法格式:
alter view 視圖名 as select語句;
并不是所有的視圖都可以更新。可以在UPDATE、DELETE或INSERT等語句中使用視圖,以更新基本表的內容。對于可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關系,如果視圖包含下述結構中的任何一種,則該視圖不可更新:
聚合函數(SUM()、MIN()、MAX()等);
DISTINCT;
HAVING;
UNION或者UNION ALL;
位于選擇列表中的子查詢;
JOIN;
FROM子句中的不可更新視圖;
WHERE子句中的子查詢,引用FROM子句中的表;
僅使用文字值(在該情況下,沒有要更新的基本表)。
注意:
視圖中雖然可以更新數據,但是有很多限制。一般情況下,最好將視圖作為查詢數據的虛擬表,而不要通過視圖更新數據。
當真實表中修改了某個存在視圖中的字段時,視圖需要更新,否則該視圖就會變成無效視圖!
重命名視圖:
rename table 視圖名 to 新視圖名;
刪除視圖:
drop view if exists 視圖名;
刪除視圖時,只刪除了視圖的定義,而并不會刪除真實表中的數據
如果想同時刪除多個視圖,則使用下面的語法格式:
drop view if exists 視圖名1, 視圖名2, 視圖名3...;
在進行練習時可以先根據下面代碼創建用于練習的兩個基本表:
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);
兩表的基本數據如下圖所示:
結合之前學過的知識可以 嘗試使用子查詢和連接查詢 來實現,參考代碼如下:
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兩表關聯,將關聯的查詢作為子表,并根據子表進行平均數的排序,平均數序號為1的平均分數最高,再以此為子表進行子查詢,查詢出了平均分最高的學校。具體結果如下:
這種方式雖然能夠解決問題,但是相對復雜,不容易看懂,為了簡化代碼,我們可以將每一個子查詢創建為一個視圖
視圖解決方式代碼:
-- 1 視圖一,連接兩表并計算平均數 CREATE VIEW t_view AS SELECT cname, avg(score) avg_score FROM student JOIN college ON sid = cno GROUP BY cname; -- 2 視圖二,利用視圖一對平均分數進行排序標號 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;
在創建完視圖后,如果想要查詢平均分前三名學校,則方便很多,創建好的視圖可以直接使用!
參考代碼及結果:
SELECT cnameFROM (tt_view)WHERE item = 1 OR item = 2 OR item = 3;
感謝各位的閱讀,以上就是“MySQL數據庫視圖的作用是什么”的內容了,經過本文的學習后,相信大家對MySQL數據庫視圖的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。