視圖的學習

簡單的說,視圖是一張虛擬表,可以加快查詢速度。
創建視圖:CREATE VIEW 視圖名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
修改視圖:CREATE OR REPLACE VIEW 視圖名 AS SELECT [...] FROM [...];
視圖條件限制:[WITH CHECK OPTION]

視圖的操作方式用實例來說明。
新建表user_first,user_product:


user_first.png

user_product.png

創建視圖user_info,user_simple_info:


user_simple_info.png

user_info.png

user_simple_info 視圖是user_first的子集,user_info是通過user_id關聯的視圖。

1.視圖的SELECT的使用:
與表的查詢方式一致,如:

SELECT a.user_a,a.user_b from user_info a
image.png

2.視圖的INSERT的使用:
(1)視圖為表的子集:

INSERT into user_simple_info(user_n,user_a) VALUES("插入",108)

視圖數據為:


image.png

表數據也同時跟新:


image.png

(2)視圖為多表關聯:
INSERT into user_info(user_n,user_a,user_b) VALUES("插入",108,"化學")

插入時報錯:[Err] 1471 - The target table user_info of the INSERT is not insertable-into
無法插入!
3.視圖的UPDATE的使用:
子集視圖不再演示,可以更新。
多表關聯視圖:
更新一張表的數據:

UPDATE user_info a SET a.user_a = 999 WHERE a.user_b = '語文'
image.png

發現視圖更新了2條,原因是更新語文這個數據時,user_a來自于同一張表中的同一個數據,數據源改變,導致修改了兩條。
更新兩張表的數據:

UPDATE user_info a SET a.user_a = 999,a.user_b="haha"
image.png

發現無法修改!
4.視圖的DELETE的使用:
(1)視圖為表的子集:

DELETE from user_simple_info WHERE user_n = '33'

刪除后視圖數據:


user_simple_info .png

刪除后表數據:


user_first.png

可見視圖數據刪除可以影響表,這前提是視圖字段是表的子集。
(2)視圖為多表關聯:
DELETE from user_info WHERE user_n = '22'
image.png

無法刪除!

上面是簡單的對視圖進行增刪改查,多表關聯后的視圖,一般操作無法完成。對表的子集的視圖可以增刪改查。如果對視圖操作成功,會影響對應表。一般要修改數據的話,可以直接操作表,從而來改變視圖數據。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發此異常。 O...
    我想起個好名字閱讀 5,407評論 0 9
  • 唉。 容我先嘆口氣。 因為我的老師太厲害了。 他聲音很溫柔,然后會在解讀某一張牌的時候,輕描淡寫的說出一些我不愿意...
    瀚文ILoveU閱讀 5,516評論 0 0
  • 他騎著自行車 他開著寶馬 他一直小心地騎在路的邊上 急于搶道的他還是讓他來不及避讓 他的寶馬和他的自行車有了輕微地...
    王小永_6be2閱讀 576評論 2 13
  • 1、本文主要內容 TreeMap及Set介紹 TreeMap源碼解析 Set源碼解析 2、TreeMap及Set介...
    某昆閱讀 307評論 0 0
  • 我寫的第一篇簡書也是關于他,味道識人,但是現在我站在路口上,不知道是前進還是后退。我應該是喜歡他,真心喜歡。要不...
    約言2333閱讀 129評論 0 0