簡單的說,視圖是一張虛擬表,可以加快查詢速度。
創建視圖: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
無法刪除!
上面是簡單的對視圖進行增刪改查,多表關聯后的視圖,一般操作無法完成。對表的子集的視圖可以增刪改查。如果對視圖操作成功,會影響對應表。一般要修改數據的話,可以直接操作表,從而來改變視圖數據。