SQL視圖
本文首先談一下視圖的含義和應用場景,之後對視圖的創建、修改、刪除、查看和更新進行講解,最後對比了視圖和表的異同。
含義:
視圖是MySQL 15.1 版本出現的新特性
- 視圖是動態生成的,系統中只保存了視圖的SQL邏輯,不保存查詢結果
- 視圖是一張虛擬表,但可以像使用普通表一樣使用視圖;
應用場景:
- 當多個地方都用到相同的查詢結果時
- 當該查詢結果使用的SQL語句較複雜時
一、創建視圖:
語法:
CREATE VIEW 視圖名
AS
查詢語句
案例:
兩張表學生表stuinfos 和 專業表major
查詢姓張的學生姓名和專業名
SELECT stuname, majorname
FROM stuinfos s
INNER JOIN major m ON s.majorid = m.id
WHERE s.stuname LIKE '張%'
如果查詢學生姓名和對應的專業名很常用,那麼可以將之封裝起來,創建視圖:
CREATE VIEW v1
AS
SELECT stuname, majorname
FROM stuinfos s
INNER JOIN major m ON s.majorid = m.id
使用試圖查詢 張同學的信息
SELECT *
FROM v1
WHERE stuname LIKE '張%'
二、視圖的修改
修改在這裏的意思是整個視圖的修改,注意和第五大點的視圖更新意思不一樣
方式一
CREATE OR REPLACE VIEW 視圖名
AS
查詢語句
方式二
ALTER VIEW 視圖名
AS
查詢語句
三、刪除視圖
語法:
DROP VIEW 視圖1,視圖2,..;
四、查看視圖
方式一:
DESC v1;
方式二:
SHOW CREATE VIEW v1;
五、視圖的更新
這裏的視圖更新是指對局部信息的更新
視圖的可更新性和視圖中的查詢定義有關係,以下類型的視圖是不能更新的:
- 包含以下關鍵字的SQL語句:分組函數,
DISTINCT, GROUP BY, HAVING, UNION 或UNION ALL
- SELECT中包含子查詢
- JOIN
- FROM 一個不能更新的視圖
- WHERE子句的子查詢引用了FROM子句的表
六、視圖和表的對比
創建語法的關鍵字 是否實際佔用物理空間 是否可以增刪改查
視圖 CREATE VIEW 只保存了SQL邏輯 一般不可以增刪改
表 CREATE TABLE 是 增刪改查