建立一個檢視

特權

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 一樣優化。它不太可能優化得更好。