資料庫視圖 本質上是一個「虛擬表」,不儲存實體資料,只儲存 `SELECT` 查詢定義。它在實際開發中並非可有可無,反而有三大高頻應用場景:
當業務查詢涉及多表關聯、巢狀子查詢、複雜聚合,單條 SQL 動輒上百行。將其封裝為視圖:
CREATE VIEW v_order_summary AS
SELECT o.id, u.name, SUM(oi.price*oi.qty) AS total
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN order_items oi ON oi.order_id = o.id
WHERE o.status = 'paid'
GROUP BY o.id, u.name;
後續業務代碼只需 `SELECT * FROM v_order_summary WHERE total > 1000;`,核心邏輯集中維護,修改一次視圖,所有呼叫處自動生效。
直接授予基表 `SELECT` 權限風險極大。視圖可投影所需欄位、過濾敏感資料:
CREATE VIEW v_employee_public AS
SELECT id, name, dept, hire_date
FROM employees
WHERE status = 'active'; -- 隱藏薪資、身分證等敏感欄位
再 `GRANT SELECT ON v_employee_public TO hr_readonly;`,即達到最小權限原則。
當多個微服務、報表系統、BI 工具共用核心資料,視圖作為「資料契約」:
善用視圖,能讓 SQL 從「寫時爽、改時痛」轉為「定義一次、到處復用、維護無憂」。