VIEW 视图管理

创建、修改和删除视图,将复杂查询封装为虚拟表

语法

CREATE [OR REPLACE] VIEW view_name AS SELECT ...;
ALTER VIEW view_name AS SELECT ...;
DROP VIEW [IF EXISTS] view_name;

参数

参数说明示例级别
CREATE VIEW 创建视图 CREATE VIEW v_active_users AS SELECT * FROM users WHERE status = 1; 常用
OR REPLACE 存在则替换 CREATE OR REPLACE VIEW v_orders AS SELECT ...; 常用
WITH CHECK OPTION 限制通过视图的修改必须满足视图条件 CREATE VIEW v_vip AS SELECT * FROM users WHERE level >= 3 WITH CHECK OPTION; 进阶
ALTER VIEW 修改视图定义 ALTER VIEW v_active_users AS SELECT id, username FROM users WHERE status = 1; 常用
DROP VIEW 删除视图 DROP VIEW IF EXISTS v_active_users; 常用

示例

创建订单统计视图

CREATE OR REPLACE VIEW v_order_summary AS
SELECT
  u.id AS user_id,
  u.username,
  COUNT(o.id) AS order_count,
  SUM(o.total_amount) AS total_spent,
  MAX(o.created_at) AS last_order_time
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.username;
将复杂的统计查询封装为视图,使用时像普通表一样 SELECT

使用视图简化查询

-- 直接查询视图
SELECT username, order_count, total_spent
FROM v_order_summary
WHERE order_count >= 10
ORDER BY total_spent DESC
LIMIT 20;
视图让复杂查询变得简单,也便于权限控制

创建安全视图(隐藏敏感列)

-- 给客服人员使用的视图,隐藏密码和敏感信息
CREATE VIEW v_user_info AS
SELECT id, username, email, phone, status, created_at
FROM users;

-- 只授权客服访问视图
GRANT SELECT ON ecommerce.v_user_info TO 'support'@'%';
通过视图控制数据访问范围,不暴露底层表结构

查看视图定义

-- 查看视图列表
SHOW FULL TABLES WHERE Table_type = 'VIEW';

-- 查看视图创建语句
SHOW CREATE VIEW v_order_summary;
定期检查视图定义是否需要更新

常见错误

ERROR 1356: View references invalid table(s) or column(s) 视图引用的表或列已被修改或删除,需要重新创建视图
ERROR 1471: The target table is not updatable 包含 GROUP BY、DISTINCT、聚合函数的视图不可更新,只能查询

技巧

相关命令