MySQL視圖更新

來源:互聯網
上載者:User

標籤:youdao   com   HERE   用法   csdn   min   語句   之間   注意   

昨天在寫美團2019秋招筆試題的時候遇到了關於視圖是否能更新的問題,突然感覺這個問題之前複習的時候重點關注過,但是卻又想不全。今天特地搜了一些資料總結一下。本文主要說明視圖的更新限制,如需關於視圖的更多知識,參考:MySql視圖原理講解與使用大全

  1. 視圖簡介
    1. 視圖不是表,不能直接儲存資料,是一張虛擬表,視圖和資料庫的表存在著對應的關係,我們在某些情況下是可以通過視圖來操作資料庫的表,這樣可以簡化查詢操作(一般情況下視圖是用來查詢用的),在某種條件下是可以利用視圖來更新資料庫表中的資料的,後面會提到視圖的更新。
    2. 一般情況下,在建立有條件限制的視圖時,加上 "WITH CHECK OPTION"命令
  2. 視圖的更新問題
    某些視圖是可更新的。也就是說,可以在UPDATE、DELETE或INSERT等語句中使用它們,以更新基表的內容。對於可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關係。如果視圖包含下述結構中的任何一種,那麼它就是不可更新的:

    1. 彙總函式(SUM(), MIN(), MAX(), COUNT()等)。
    2. DISTINCT
    3. GROUP BY
    4. HAVING
    5. UNION或UNION ALL
    6. 位於挑選清單中的子查詢
    7. Join
    8. FROM子句中的不可更新視圖
    9. WHERE子句中的子查詢,引用FROM子句中的表。
    10. 僅引用文字值(在該情況下,沒有要更新的基本表)。
    11. ALGORITHM = TEMPTABLE(使用暫存資料表總會使視圖成為不可更新的)。

注意:
視圖中雖然可以更新資料,但是有很多的限制。一般情況下,最好將視圖作為查詢資料的虛擬表,而不要通過視圖更新資料。因為,使用視圖更新資料時,如果沒有全面考慮在視圖中更新資料的限制,就可能會造成資料更新失敗。

WITH[CASCADED|LOCAL] CHECK OPTION能不能決定視圖是否能更新?
  1. 這兩個參數的基本定義如下:
    LOCAL參數表示更新視圖時只要滿足該視圖本身定義的條件即可。
    CASCADED參數表示更新視圖時需要滿足所有相關視圖和表的條件。沒有指明時,該參數為預設值。

  2. 對於with check option用法,總結如下:
    1. 視圖只操作它可以查詢出來的資料,對於它查詢不出的資料,即使基表有,也不可以通過視圖來操作。
    2. 對於update,有with check option,要保證update後,資料要被視圖查詢出來
    3. 對於delete,有無with check option都一樣
    4. 對於insert,有with check option,要保證insert後,資料要被視圖查詢出來
    5. 對於沒有where 子句的視圖,使用with check option是多餘的

本文參考:MySql視圖原理講解與使用大全 和之前視圖學習筆記
如需轉載請註明出處:https://www.cnblogs.com/zhuchenglin/p/9602569.html

MySQL視圖更新

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.