視圖是虛擬表,不存儲物理數據,查詢時動態執行定義 SQL。優勢:簡化業務 SQL、安全隔離(只暴露允許的列/行)、邏輯獨立(底表結構變更不影響視圖使用者)。
-- 創建/替換
CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)] AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
-- 修改
ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)] AS select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION];
-- 刪除
DROP VIEW [IF EXISTS] view_name [, view_name2] ... [RESTRICT|CASCADE];
CREATE VIEW view_test AS
SELECT t1.sid, t1.username, t2.department
FROM test1 t1 LEFT JOIN test2 t2 ON t1.sid = t2.sid;
SELECT * FROM view_test;
DROP VIEW view_test;
FROM 子句不可包含子查詢(MySQL 5.7+ 已放寬,但建議避免)。GROUP BY/DISTINCT/HAVING/UNION、常量視圖、SELECT 含子查詢、JOIN、FROM 引用不可更新視圖、WHERE 子查詢引用 FROM 表。WITH CASCADED CHECK OPTION(默認):更新時必須滿足當前視圖及所有底層視圖的條件。WITH LOCAL CHECK OPTION:僅需滿足當前視圖條件。MySQL 5.1+ SHOW TABLES 同時列出表與視圖;SHOW FULL TABLES WHERE Table_type = 'VIEW' 僅顯示視圖。