MySQL
MySQL
CREATE OR REPLACE VIEW v_paid_orders AS
SELECT id, user_id, total, created_at
FROM orders
WHERE status = 'paid';
SELECT * FROM v_paid_orders WHERE user_id = 100;PostgreSQL
PostgreSQL
CREATE OR REPLACE VIEW v_paid_orders AS
SELECT id, user_id, total, created_at
FROM orders
WHERE status = 'paid';
-- 物化视图:结果落盘,需要手动刷新
CREATE MATERIALIZED VIEW mv_daily_sales AS
SELECT date_trunc('day', created_at) AS d, SUM(total) AS amount
FROM orders GROUP BY 1;
REFRESH MATERIALIZED VIEW mv_daily_sales;| 普通视图 | 只保存查询定义,每次访问都执行底层语句 |
|---|---|
| 物化视图 | PG 支持:结果落盘 + REFRESH;MySQL 无原生物化视图 |
| 权限 | 可只授权视图而不暴露基表,收敛访问范围 |