CREATE TABLE employee (
id INT, first_name VARCHAR(15), last_name VARCHAR(15),
start_date DATE, end_date DATE, salary FLOAT(8,2),
city VARCHAR(10), description VARCHAR(15)
) ENGINE=InnoDB;
CREATE TABLE job (
id INT, title VARCHAR(20)
) ENGINE=InnoDB;
-- 插入測試資料(略,見原文)
CREATE ALGORITHM = TEMPTABLE VIEW myview (id, first_name, title) AS
SELECT o.id, o.first_name, c.title
FROM job c, employee o
WHERE o.id = c.id;
| 模式 | 機制 | 適用場景 |
|---|---|---|
| MERGE | 將視圖定義合併到外層查詢(預設) | 簡單視圖、可使用索引、效能最佳 |
| TEMPTABLE | 先將視圖結果物化到臨時表 | 含聚合、DISTINCT、GROUP BY、UNION 等無法合併時 |
| UNDEFINED | 由優化器自動選擇 | 不確定時讓優化器決定 |
SELECT * FROM myview;
-- 結果:8 筆員工與職稱關聯資料
-- 修改:需 DROP 再 CREATE,或使用 CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW myview AS SELECT ...;
-- 刪除
DROP VIEW [IF EXISTS] myview;
符合以下條件的視圖可直接 INSERT/UPDATE/DELETE:
GRANT SELECT ON db.myview TO 'report_user'@'%';
-- 基表無需授權,實現欄位級/行級安全隔離
EXPLAIN SELECT * FROM myview 檢查執行計畫,確認索引使用。