1. 为什么需要多表视图
在数据库日常运维中,我们经常会遇到需要从多个表中提取数据的场景。比如电商系统中,订单信息可能分散在orders、order_items、customers三个表中。每次查询完整订单详情都需要编写复杂的JOIN语句,不仅效率低下,还容易出错。
视图(View)就像给复杂查询套了个壳子。我在某次库存管理系统改造中就深有体会:原先需要跨5个表查询的报表,封装成视图后,业务部门直接SELECT * FROM inventory_report就能获取数据,开发效率提升60%以上。
重要提示:视图不存储实际数据,它只是保存的查询定义。每次访问视图时都会重新执行底层SQL,这点和物化视图(Materialized View)有本质区别。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 视图创建基础语法
2.1 标准创建语句
最基础的视图创建语法如下:
sql复制CREATE VIEW view_name AS
SELECT column1, column2...
FROM table1
JOIN table2 ON join_condition
[WHERE conditions];
实际案例:为电商系统创建订单详情视图
sql复制CREATE VIEW order_details AS
SELECT
o.order_id,
o.order_date,
c.customer_name,
c.phone,
i.product_id,
i.quantity,
i.unit_price
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN order_items i ON o.order_id = i.order_id;
2.2 WITH CHECK OPTION详解
这个可选参数经常被忽视,但却非常实用。它会对视图的增删改操作进行约束检查:
sql复制CREATE VIEW active_users AS
SELECT * FROM users
WHERE status = 'active'
WITH CHECK OPTION;
此时如果执行:
sql复制UPDATE
