建立一個檢視
特權
CREATE VIEW 語句需要檢視的 CREATE VIEW 許可權,以及 SELECT 語句選擇的每個列的某些許可權。對於 SELECT 語句中其他位置使用的列,你必須具有 SELECT 許可權。如果存在 OR REPLACE 子句,則還必須具有該檢視的 DROP 特權。CREATE VIEW 可能還需要 SUPER 許可權,具體取決於 DEFINER 值,如本節後面所述。
引用檢視時,將進行許可權檢查。
檢視屬於資料庫。預設情況下,在預設資料庫中建立新檢視。要在給定資料庫中顯式建立檢視,請使用完全限定名稱
例如:
db_name.view_name
mysql> CREATE VIEW test.v AS SELECT * FROM t;
注 - 在資料庫中,基表和檢視共享相同的名稱空間,因此基表和檢視不能具有相同的名稱。
一個檢視可以:
- 可以從多種 SELECT 語句中建立
- 參考基表或其他檢視
- 使用連線,UNION 和子查詢
- SELECT 甚至不需要引用任何表
另一個例子
以下示例定義了一個檢視,該檢視從另一個表中選擇兩列以及從這些列計算的表示式:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| `qty` | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
限制
- 在 MySQL 5.7.7 之前,SELECT 語句不能在 FROM 子句中包含子查詢。
- SELECT 語句不能引用系統變數或使用者定義的變數。
- 在儲存的程式中,SELECT 語句不能引用程式引數或區域性變數。
- SELECT 語句不能引用預準備語句引數。
- 定義中引用的任何表或檢視都必須存在。建立檢視後,可以刪除
定義引用的表或檢視。在這種情況下,使用檢視會導致錯誤。要檢查此類問題的檢視定義,請使用 CHECK TABLE 語句。 - 該定義不能引用 TEMPORARY 表,也不能
建立 TEMPORARY 檢視。 - 你無法將觸發器與檢視關聯。
- 將檢查 SELECT 語句中列名稱的別名,最大列長度為 64 個字元(不是最大別名
長度為 256 個字元)。 VIEW
可能會或可能不會與等效的SELECT
一樣優化。它不太可能優化得更好。