視圖是虛擬表,不存儲數據,通過封裝查詢動態生成。列可來自不同表,提高安全性(只暴露特定列)。
特點:
1. 列源自多表,邏輯抽象
2. 由基本表衍生
3. 創建/刪除不影響基本表
4. 更新視圖直接影響基本表
5. 多表視圖不允許增刪數據
CREATE VIEW view_name AS SELECT ...
CREATE TABLE t_product(id INT, name VARCHAR(20), price FLOAT); -- 修正列名 ALTER TABLE t_product CHANGE name product VARCHAR(20); -- 創建視圖 CREATE VIEW view_product AS SELECT id, product FROM t_product; SELECT * FROM view_product; -- 僅見 id, product,price 隱藏
常量視圖:
CREATE VIEW view_const AS SELECT 3.1415926;
聚合視圖:CREATE VIEW view_fun AS SELECT COUNT(name) FROM t_student;
排序視圖:CREATE VIEW view_order AS SELECT name FROM t_student ORDER BY id DESC;
內連接視圖:CREATE VIEW view_join AS SELECT s.name FROM t_student s, t_group g WHERE s.group_id=g.id AND g.id=2;
左連接視圖:CREATE VIEW view_left AS SELECT s.name FROM t_student s LEFT JOIN t_group g ON s.group_id=g.id WHERE g.id=2;
子查詢視圖:CREATE VIEW view_child AS SELECT s.name FROM t_student s WHERE s.group_id IN (SELECT id FROM t_group);
UNION 視圖:CREATE VIEW view_union AS SELECT id,name FROM t_student UNION ALL SELECT id,name FROM t_group;
SHOW TABLES; -- 視圖同表一起顯示 SHOW TABLE STATUS LIKE "view_name"\G; SHOW CREATE VIEW view_name\G; -- 查看定義 DESC view_name;
DROP VIEW view_name[, view_name2...];
方式一:
CREATE OR REPLACE VIEW view_name AS ...(無需先刪除)
方式二:ALTER VIEW view_name AS ...
示例:
CREATE OR REPLACE VIEW view_product AS SELECT id FROM t_product;隱藏 product 列。