91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL數據庫視圖的作用是什么

發布時間:2022-07-14 14:19:08 來源:億速云 閱讀:420 作者:iii 欄目:MySQL數據庫

這篇文章主要講解了“MySQL數據庫視圖的作用是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL數據庫視圖的作用是什么”吧!

MySQL數據庫視圖的作用是什么

1 視圖的介紹與作用

視圖的介紹:

  • 視圖 view 是一個虛擬表,非真實存在,其 本質是根據SQL語句獲取動態的數據集,并為其命名, 用戶使用時只需要使用視圖名稱即可獲取結果集,并可以將其當作表來使用。

  • 數據庫中只存放了視圖的定義,而并沒有存放視圖中的數據。 數據還存在于原來的數據表中。

  • 使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。因此, 視圖中的數據是依賴于原來表中數據的。 當表的數據發生改變,視圖中的數據也會隨之改變。

視圖的作用:

  • 簡化代碼, 我們可以把重復使用的查詢封裝成視圖重復使用,同時可以 使復雜的查詢易于理解;

  • 更加安全, 比如,如果有一張表中有很多數據,很多信息不希望被其他人看到,這時就可以使用到視圖,對不同的用戶使用不同的視圖。


2 視圖的創建

創建視圖的語法如下:

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

參數說明:

  1. algorithm: 表示視圖選擇的算法,可選;

  2. view_name: 創建的視圖名稱;

  3. column_list: 指定視圖中各個屬性的名詞,默認情況下與SELECT語句中查詢的屬性相同;

  4. select_statement: 表示一個完整的查詢語句,將查詢記錄導入視圖中;

  5. [with [cascaded | local] check option]: 表示更新視圖時要保證該視圖在權限范圍之內。


3 視圖的修改

修改視圖是指修改數據庫中已存在的表的定義。當基本表中的某些字段發生改變時,可以通過修改視圖來保持視圖和基本表之間的一致。

語法格式:

alter view 視圖名 as select語句;

4 視圖的更新

并不是所有的視圖都可以更新。可以在UPDATE、DELETE或INSERT等語句中使用視圖,以更新基本表的內容。對于可更新的視圖,在視圖中的行和基本表中的行之間必須具有一對一的關系,如果視圖包含下述結構中的任何一種,則該視圖不可更新:

  • 聚合函數(SUM()、MIN()、MAX()等);

  • DISTINCT;

  • HAVING;

  • UNION或者UNION ALL;

  • 位于選擇列表中的子查詢;

  • JOIN;

  • FROM子句中的不可更新視圖;

  • WHERE子句中的子查詢,引用FROM子句中的表;

  • 僅使用文字值(在該情況下,沒有要更新的基本表)。

注意:
視圖中雖然可以更新數據,但是有很多限制。一般情況下,最好將視圖作為查詢數據的虛擬表,而不要通過視圖更新數據。
當真實表中修改了某個存在視圖中的字段時,視圖需要更新,否則該視圖就會變成無效視圖!


5 視圖的重命名與刪除

重命名視圖:

rename table 視圖名 to 新視圖名;

刪除視圖:

drop view if exists 視圖名;

刪除視圖時,只刪除了視圖的定義,而并不會刪除真實表中的數據

如果想同時刪除多個視圖,則使用下面的語法格式:

drop view if exists 視圖名1, 視圖名2, 視圖名3...;

6 視圖的練習

6.1 數據準備

在進行練習時可以先根據下面代碼創建用于練習的兩個基本表:

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);

兩表的基本數據如下圖所示:

MySQL數據庫視圖的作用是什么

6.2 查詢平均分最高的學校名稱

結合之前學過的知識可以 嘗試使用子查詢和連接查詢 來實現,參考代碼如下:

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的平均分數最高,再以此為子表進行子查詢,查詢出了平均分最高的學校。具體結果如下:
MySQL數據庫視圖的作用是什么

這種方式雖然能夠解決問題,但是相對復雜,不容易看懂,為了簡化代碼,我們可以將每一個子查詢創建為一個視圖

視圖解決方式代碼:

-- 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數據庫視圖的作用是什么”的內容了,經過本文的學習后,相信大家對MySQL數據庫視圖的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳江市| 左云县| 屏南县| 隆尧县| 莱州市| 天全县| 定远县| 赤峰市| 自贡市| 泽州县| 田林县| 古交市| 百色市| 罗城| 郧西县| 镇巴县| 蓬莱市| 普格县| 宁河县| 鹰潭市| 团风县| 呼图壁县| 泽州县| 内黄县| 罗江县| 甘洛县| 吐鲁番市| 丰台区| 霍林郭勒市| 福鼎市| 汤阴县| 绥棱县| 唐山市| 姚安县| 齐河县| 靖江市| 达尔| 孝昌县| 扎赉特旗| 石棉县| 张北县|